2017-09-08 2 views
1

TensorFlowのすべてのレイヤーのグラデーションをカスタムグラデーションで変更し、現在のグラデーションを保存しようとしています。概念的には、I番目の反復における単層の演算処理は次のようになりますTensorFlowバックグラウンドパスのグラデーションを変更する

  1. original_grad = (actual gradient computed by TF)
  2. custom_grad = f(original_grad, stored_grad[i - 1])
  3. stored_grad[i] = original_grad
  4. 使用custom_grad層の重みを更新する

私はTFにはかなり新しいので、どうやって達成できたのかはかなり失われています。

答えて

2

ご質問にお答えするには、optimizer.minimize(loss)に電話する際にオプティマイザが通常行うことを確認する必要があります。

実際には、次の2つの操作:compute_gradients()apply_gradientsを実行しています。

Tensorflow documentation of tf.train.Optimizerから、私たちは読み:minimize()を呼び出す

は、勾配を計算し、変数に適用することの両方の世話をします。

だから、

あなたがあなたの代わりに三の段階でオプティマイザを使用することができ、それらを適用する前に勾配 を処理したい場合:

  1. compute_gradients()との勾配を計算します。
  2. グラデーションを任意の方法で処理します。
  3. apply_gradients()で処理された勾配を適用します。

    # Create an optimizer. 
    opt = GradientDescentOptimizer(learning_rate=0.1) 
    
    # Compute the gradients for a list of variables. 
    grads_and_vars = opt.compute_gradients(loss, <list of variables>) 
    
    # grads_and_vars is a list of tuples (gradient, variable). Do whatever you 
    # need to the 'gradient' part, for example cap them, etc. 
    capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars] 
    
    # Ask the optimizer to apply the capped gradients. 
    opt.apply_gradients(capped_grads_and_vars) 
    
    :私はグラデーションにいくつかの変更を適用した例を取ることができますドキュメントから直接

関連する問題