8

問題: 非常に長い RNN ネット

N1 -- N2 -- ... --- N100

のようなオプティマイザーの場合AdamOptimizer、 はcompute_gradient()すべてのトレーニング変数に勾配を与えます。

ただし、一部のステップで爆発する可能性があります。

how-to-effectively-apply-gradient-clipping-in-tensor-flow のようなメソッドは、 大きな最終勾配をクリップできます。

しかし、それらの中間のものを切り取る方法は?

1 つの方法は、"N100 --> N99" から手動で backprop を実行し、勾配をクリップしてから "N99 --> N98" などを行うことですが、これは複雑すぎます。

私の質問は次のとおりです。中間のグラデーションをクリップする簡単な方法はありますか? (もちろん、厳密に言えば、それらは数学的な意味での勾配ではありません)

4

2 に答える 2

0

custom_gradientデコレーターを使用して、tf.identity分解されたグラデーションの中間にあるクリップのバージョンを作成できます。

``` tensorflow.contrib.eager.python import tfe から

@tfe.custom_gradient def gradient_clipping_identity(tensor, max_norm): 結果 = tf.identity(tensor)

def grad(dresult): return tf.clip_by_norm(dresult, max_norm), None

結果を返す、卒業生 ```

次にgradient_clipping_identity、通常どおりアイデンティティを使用すると、グラデーションが後方パスでクリップされます。

于 2017-10-27T18:30:37.970 に答える