41

テンソルフローとテンソルボードの使い方を学ぼうとしています。MNIST ニューラル ネット チュートリアルに基づくテスト プロジェクトがあります。

私のコードでは、次のように、正しく分類されたデータ セット内の数字の割合を計算するノードを作成します。

correct = tf.nn.in_top_k(self._logits, labels, 1)
correct = tf.to_float(correct)
accuracy = tf.reduce_mean(correct)

ここで、self._logitsはグラフの推論部分でありlabels、正しいラベルを含むプレースホルダーです。

ここで、トレーニングが進むにつれて、トレーニング セットと検証セットの両方の精度を評価したいと思います。これを行うには、異なる feed_dicts を使用して精度ノードを 2 回実行します。

train_acc = tf.run(accuracy, feed_dict={images : training_set.images, labels : training_set.labels})
valid_acc = tf.run(accuracy, feed_dict={images : validation_set.images, labels : validation_set.labels})

これは意図したとおりに機能します。値を出力すると、最初は 2 つの精度が両方とも増加し、最終的には検証の精度が横ばいになり、トレーニングの精度が向上し続けることがわかります。

ただし、テンソルボードでこれらの値のグラフも取得したいのですが、これを行う方法がわかりません。に を追加するだけscalar_summaryaccuracyは、ログに記録された値はトレーニング セットと検証セットを区別しません。

また、名前の異なる 2 つの同一のaccuracyノードを作成し、1 つをトレーニング セットで、もう 1 つを検証セットで実行してみました。次にscalar_summary、これらの各ノードに a を追加します。これにより、テンソルボードに 2 つのグラフが表示されますが、トレーニング セットの精度を示す 1 つのグラフと検証セットの精度を示す 1 つのグラフではなく、どちらも端末に出力された値と一致しない同一の値を示しています。

私はおそらくこの問題を解決する方法を誤解しています。異なる入力に対して単一ノードからの出力を別々にログに記録する推奨される方法は何ですか?

4

2 に答える 2

55

これを実現する方法はいくつかありますが、さまざまなtf.summary.scalar()ノードを作成することで正しい方向に進んでいます。数量をイベント ファイルに記録するたびに明示的に呼び出す必要がSummaryWriter.add_summary()あるため、最も簡単な方法は、トレーニングまたは検証の精度を取得するたびに適切なサマリー ノードを取得することです。

accuracy = tf.reduce_mean(correct)

training_summary = tf.summary.scalar("training_accuracy", accuracy)
validation_summary = tf.summary.scalar("validation_accuracy", accuracy)


summary_writer = tf.summary.FileWriter(...)

for step in xrange(NUM_STEPS):

  # Perform a training step....

  if step % LOG_PERIOD == 0:

    # To log training accuracy.
    train_acc, train_summ = sess.run(
        [accuracy, training_summary], 
        feed_dict={images : training_set.images, labels : training_set.labels})
    writer.add_summary(train_summ, step) 

    # To log validation accuracy.
    valid_acc, valid_summ = sess.run(
        [accuracy, validation_summary],
        feed_dict={images : validation_set.images, labels : validation_set.labels})
    writer.add_summary(valid_summ, step)

または、タグが a である単一のサマリー op を作成し、文字列または必要に応じtf.placeholder(tf.string, [])てフィードすることもできます。"training_accuracy""validation_accuracy"

于 2015-12-26T19:31:54.327 に答える