私がしている機能は、与えられた変数のグラディエントが、私のエラー関数に関して何らかのデータが与えられているかを知ることができることです。TensorFlow変数で損失の勾配を取得するにはどうすればよいですか?
これを行う方法の1つは、trainを呼び出した後に変数がどれだけ変化したかを確認することですが、学習アルゴリズムに基づいて大きく変化する可能性があります(たとえば、RProp )そしてちょうど非常にきれいではありません。
ありがとうございます。
私がしている機能は、与えられた変数のグラディエントが、私のエラー関数に関して何らかのデータが与えられているかを知ることができることです。TensorFlow変数で損失の勾配を取得するにはどうすればよいですか?
これを行う方法の1つは、trainを呼び出した後に変数がどれだけ変化したかを確認することですが、学習アルゴリズムに基づいて大きく変化する可能性があります(たとえば、RProp )そしてちょうど非常にきれいではありません。
ありがとうございます。
tf.gradients()
関数を使用すると、変数を含む1つ以上の他のテンソル—に対して1テンソルのシンボリックな勾配を計算できます。あなたはその後、いくつかの特定のデータの数値勾配を計算するために、この象徴的な勾配を使用することができます
data = tf.placeholder(tf.float32)
var = tf.Variable(...) # Must be a tf.float32 or tf.float64 variable.
loss = some_function_of(var, data) # some_function_of() returns a `Tensor`.
var_grad = tf.gradients(loss, [var])[0]
::次の簡単な例を考えてみましょう私が見たい場合は
sess = tf.Session()
var_grad_val = sess.run(var_grad, feed_dict={data: ...})
グラディエントを 'GradientDescentOptimizer'や' AdagradOptimizer'のようなビルトイントレーニングアルゴリズムと組み合わせて使用したい場合はどうすればいいですか?ネットワークの勾配を2度計算する必要はありません。 – gideonite
'tf.train.GradientDescentOptimizer'クラス(および関連する' Optimizer'クラス)は 'tf.gradients()'を内部的に呼び出します。オプティマイザで計算されたグラデーションにアクセスする場合は、 'optimizer.put()'を呼び出すのではなく 'optimizer.compute_gradients()'と 'optimizer.apply_gradients()'を手動で呼び出すことができます。 – mrry
@mrry:ただし、ここでの「シンボリック」グラディエントは評価されていないテンソルであり、実際のシンボリックグラディエントではありません。symgrad(x^2)= 2 * xです。テンターボードを見ずにこれを得る方法はありますか? – bge0
も、あなたの質問の仕事に対する解決策を行います/訓練の進行に伴って勾配を検査するか? – Pinocchio