私はTensorFlow "MNIST For ML Beginners"チュートリアルを見ています。トレーニングのたびにトレーニングの損失をプリントアウトしたいと思います。TensorFlowトレーニング中の損失の印刷
マイトレーニングループは現在、次のようになります。
cross_entropy
私はプリントアウトしたい損失である
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
:
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
for i in range(100):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
さて、train_step
は次のように定義され
これを印刷する方法の1つは、明示的にトレーニングループで:
for i in range(100):
batch_xs, batch_ys = mnist.train.next_batch(100)
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
print 'loss = ' + str(cross_entropy)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
私は今、このに関する二つの質問があります:cross_entropy
はすでにsess.run(train_step, ...)
間に計算されていることを考えると
を、二倍の数を必要とし、それを2回計算するために非効率ですすべてのトレーニングデータの順方向パス。
sess.run(train_step, ...)
の間に計算されたときにcross_entropy
の値にアクセスする方法はありますか?tf.Variable
を印刷するにはどうすればよいですか?str(cross_entropy)
を使用するとエラーが発生します...
ありがとう!
感謝。だから私は 'sess.run([train_step、cross_entropy])'を呼び出すたびに 'cross_entropy'を1回だけ計算します。私が渡す変数のそれぞれに対して追加のフォワードパスはありませんか? – Karnivaurus
これは正しいことです。( 'cross_entropy'はすでにトレーニングステップの一部として計算されているので)完全に同じサブグラフを実行し、' cross_entropy'の値をPythonプログラムにフェッチする余分なノードを追加するだけです。 – mrry
ありがとうございます。サイドポイントとして、提案したように自分のコードを更新した後、 'cross_entropy'の値は平均してループ全体で減少します。しかし、実際には、トレーニングの反復から次のトレーニングの反復にかけて増加することがあります。これは、勾配降下のステップサイズの範囲で起こります。これは期待されていますか?あなたはこの損失を減らすべき方向に体重を動かしているので、各反復後に損失は常に減少しないでしょうか?損失対反復のグラフはここにあります:http://i.stack.imgur.com/f8B80.png – Karnivaurus