Spa*_*cey 29 python machine-learning tensorflow tensorboard
我有一个TensorFlow模型,该模型的一部分评估准确性.这accuracy
只是张量流图中的另一个节点,它接收logits
和labels
.
当我想绘制训练准确性时,这很简单:我有类似的东西:
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)
Run Code Online (Sandbox Code Playgroud)
然后,在我的训练循环中,我有类似的东西:
for n in xrange(1000):
...
summary, ..., ... = sess.run([summary_op, ..., ...], feed_dict)
writer.add_summary(summary, n)
...
Run Code Online (Sandbox Code Playgroud)
同样在for循环内,每说100次迭代,我想评估验证的准确性.我有一个单独的feed_dict,我能够在python中非常好地评估验证的准确性.
但是,这是我的问题:我想通过使用节点为验证准确性做另一个总结accuracy
.我不清楚如何做到这一点.因为我有accuracy
节点,所以我应该能够重新使用它,但我不确定如何准确地执行此操作,这样我也可以将验证准确性写为单独的标量语句...
怎么可能这样呢?
wih*_*wih 41
您可以重复使用精度节点,但需要使用两个不同的SummaryWriters,一个用于训练运行,另一个用于测试数据.此外,您还必须为变量指定标量摘要以确保准确性.
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')
Run Code Online (Sandbox Code Playgroud)
然后在训练循环中,您将接受正常训练,并使用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))
Run Code Online (Sandbox Code Playgroud)
然后,您可以将TensorBoard指向父目录(summaries_dir),它将加载两个数据集.
这也可以在TensorFlow HowTo的https://www.tensorflow.org/versions/r0.11/how_tos/summaries_and_tensorboard/index.html中找到.
要运行相同的操作但使用不同的feed_dict数据获取摘要,只需将两个摘要操作附加到该操作.假设您希望在验证和测试数据上运行准确性操作,并希望获得两者的摘要:
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)
Run Code Online (Sandbox Code Playgroud)
还记得你总是可以像这样从protobuff summary_str中提取原始(标量)数据并进行自己的日志记录.
归档时间: |
|
查看次数: |
35282 次 |
最近记录: |