我正在尝试学习如何使用tensorflow和tensorboard.我有一个基于MNIST神经网络教程的测试项目.
在我的代码中,我构造了一个节点,用于计算正确分类的数据集中的数字部分,如下所示:
correct = tf.nn.in_top_k(self._logits, labels, 1)
correct = tf.to_float(correct)
accuracy = tf.reduce_mean(correct)
Run Code Online (Sandbox Code Playgroud)
这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})
Run Code Online (Sandbox Code Playgroud)
这按预期工作.我可以打印这些值,我可以看到,最初,两个精度都会增加,最终验证精度会在训练精度不断提高时变平.
但是,我还想在tensorboard中得到这些值的图表,我无法弄清楚如何做到这一点.如果我只是添加一个scalar_summary
to accuracy
,则记录的值将不区分训练集和验证集.
我还尝试创建两个accuracy
具有不同名称的相同节点,并在训练集上运行一个,在验证集上运行一个.然后我scalar_summary
为每个节点添加一个.这确实在张量板中给出了两个图形,但是它们不是显示训练集精度的一个图形而是显示验证集精度的图形,而是显示与打印到终端的任何一个都不匹配的相同值.
我可能误解了如何解决这个问题.对于不同的输入,单独记录单个节点的输出的推荐方法是什么?
有没有办法在同一图表上绘制训练损失和验证损失?
很容易为每个单独的标记提供两个单独的标量摘要,但这会将它们放在单独的图形上.如果两者都显示在同一图表中,则更容易看出它们之间的差距以及它们是否因过度拟合而开始出现分歧.
有没有内置的方法来做到这一点?如果没有,一个解决方法?非常感谢!
目前tensorflow的张量板与python3不兼容.因此,一般而言,我正在寻找一种在100个时期内打印出摘要读数的方法.
是否有函数summary_str
将以下行中生成的字节字符串解析为浮点字典?
summary_op = tf.merge_all_summaries()
summary_str = sess.run(summary_op, feed_dict=feed_dict)
Run Code Online (Sandbox Code Playgroud)