2016-10-20 21 views
16

私はTensorFlowモデルを持ち、このモデルの一部が精度を評価します。 accuracyは、テンソルフローグラフの別のノードで、logitslabelsを取ります。同じグラフを使用してTensorFlowでトレーニングと検証の精度を表示

私はトレーニング精度をプロットしたい場合は、これは簡単です:、その後

tf.scalar_summary("Training Accuracy", accuracy) 
tf.scalar_summary("SomethingElse", foo) 
summary_op = tf.merge_all_summaries() 
writer = tf.train.SummaryWriter('/me/mydir/', graph=sess.graph) 

私のトレーニングループ中に、私のようなものがあります:私のようなものを持っている。また内部

for n in xrange(1000): 
    ... 
    summary, ..., ... = sess.run([summary_op, ..., ...], feed_dict) 
    writer.add_summary(summary, n) 
    ... 

をそれはループのために、毎回100反復、私はの妥当性検証の精度を評価したいと思います。私はこれのために別々のfeed_dictを持っています、そして、私はpythonで非常にきれいに検証の精度を評価することができます。

しかし、ここに私の問題があります。accuracyノードを使用して、検証精度のサマリーを別のにしたいと考えています。私はこれをどうやって行うのかはっきりしていません。私はaccuracyノードを持っているので、再利用できるはずですが、これを正確に行う方法がわからないので、別のscalar_summaryとして書かれた検証精度を得ることができます...

これはどのように可能ですか?

+0

他の解決策については、私は[ここ](http://stackoverflow.com/questions/37146614/tensorboard-plot-training-and-validation-losses-on-the-same-graph)と同様の質問がありました。 – golmschenk

+0

これはあなたの質問に答えるかもしれません(2つの要約ディレクトリを設定することなく):http://stackoverflow.com/questions/34471563/logging-training-and-validation-loss-in-tensorboard –

答えて

22

精度ノードを再利用できますが、トレーニングランとテストデータの2つの異なるSummaryWriterを使用する必要があります。また、精度のためにスカラサマリを変数に割り当てる必要があります。

accuracy_summary = tf.scalar_summary("Training Accuracy", accuracy) 
tf.scalar_summary("SomethingElse", foo) 
summary_op = tf.merge_all_summaries() 
summaries_dir = '/me/mydir/' 
train_writer = tf.train.SummaryWriter(summaries_dir + '/train', sess.graph) 
test_writer = tf.train.SummaryWriter(summaries_dir + '/test') 

トレーニングループでは通常のトレーニングを受けており、train_writerで要約を記録します。さらに、100回目の繰り返しごとにテストセット上でグラフを実行し、test_writerで精度の要約のみを記録します。

# Record train set summaries, and train 
summary, _ = sess.run([summary_op, train_step], feed_dict=...) 
train_writer.add_summary(summary, n) 
if n % 100 == 0: # Record summaries and test-set accuracy 
    summary, acc = sess.run([accuracy_summary, accuracy], feed_dict=...) 
    test_writer.add_summary(summary, n) 
    print('Accuracy at step %s: %s' % (n, acc)) 

次に、TensorBoardを親ディレクトリ(summaries_dir)にポイントすると、両方のデータセットがロードされます。

これも同じ操作を実行しますが、異なるfeed_dictデータとの要約を取得するには、単にそのOPに2つの概要OPSを添付するにはTensorFlow手引きのhttps://www.tensorflow.org/versions/r0.11/how_tos/summaries_and_tensorboard/index.html

+0

私はこれを試してくれてありがとう...報告する。 – Spacey

+0

これは問題だと思います。「summary_op」には、いくつかのマージされた要約が含まれています。しかし、私はちょうどvalidation_errorの "要約"がほしい...それは理にかなっていますか?私が "summary_op"をn%100のループの中でもう一度渡して "要約"を出すのと同じように、すべてのサマリーを "実行"するようです。 (マージされたすべてのもの)。しかし、私はちょうど正確なノードを実行したい... – Spacey

+0

また、なぜtest_writerに "sess.graph"を持っていないのですか? – Spacey

4

で見つけることができます。あなたが検証およびテスト・データの両方に精度オペアンプを実行したいとの両方のための要約を取得したいと言う:

validation_acc_summary = tf.summary.scalar('validation_accuracy', accuracy) # intended to run on validation set 
test_acc_summary = tf.summary.scalar('test_accuracy', accuracy) # intended to run on test set 
with tf.Session() as sess: 
    # do your thing 
    # ... 
    # accuracy op just needs labels y_ and input x to compute logits 
    validation_summary_str = sess.run(validation_acc_summary, feed_dict=feed_dict={x: mnist.validation.images,y_: mnist.validation.labels}) 
    test_summary_str = sess.run(test_acc_summary, feed_dict={x: mnist.test.images,y_: mnist.test.labels}) 

    # assuming you have a tf.summary.FileWriter setup 
    file_writer.add_summary(validation_summary_str) 
    file_writer.add_summary(test_summary_str) 

はまた、あなたがいつもthisようprotobuffのsummary_strの外生(スカラ)データを取得し、あなた自身を行うことができます覚えていますロギング。

関連する問題