在张量板上记录训练和验证损失
python
tensorboard
tensorflow
4
0

我正在尝试学习如何使用tensorflow和tensorboard。我有一个基于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运行两次准确性节点来做到这一点:

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})

这按预期工作。我可以打印这些值,并且可以看到最初两个精度都将提高,最终验证精度将趋于平稳,而训练精度将不断提高。

但是,我也想在张量板上获得这些值的图形,而且我不知道该怎么做。如果我只是一个补充scalar_summaryaccuracy ,记录的值不会训练集和验证集区分。

我还尝试创建两个具有不同名称的相同accuracy节点,并在训练集上运行一个,在验证集上运行一个。然后,我向每个这些节点添加一个scalar_summary 。这确实给了我张量板上的两个图,但是与其一个显示训练集精度的图和一个显示验证集精度的图,它们都显示了与打印到终端的值都不匹配的相同值。

我可能误会了如何解决这个问题。建议单独记录单个节点针对不同输入的输出的方法是什么?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

有几种不同的方法可以实现此目的,但是通过创建不同的tf.summary.scalar()节点,您可以走上正确的路。因为每次要将数量记录到事件文件中时都必须显式调用SummaryWriter.add_summary() ,所以最简单的方法可能是每次希望获得训练或验证准确性时都获取适当的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)

另外,您可以创建一个标签为tf.placeholder(tf.string, [])摘要操作,并根据需要输入字符串"training_accuracy""validation_accuracy"

收藏
评论

另一种方法是使用第二个文件编写器。因此,您可以使用merge_summaries命令。

train_writer = tf.summary.FileWriter(FLAGS.summaries_dir + '/train',
                                      sess.graph)
test_writer = tf.summary.FileWriter(FLAGS.summaries_dir + '/test')
tf.global_variables_initializer().run()

这是完整的文档。这对我来说很好: TensorBoard:Visualizing Learning

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号