我正在尝试使用TensorFlow训练模型,然后获得损失图。我正在使用以下代码段:
##
# \file mypackage.py
# \author me
# \brief A one-liner
# \details Lots and lots of lines of usage information
#
##
# \package mypackage
# \copydoc mypackage.py
#
当我在TensorBoard中打开日志目录时,我无法看到针对运行的丢失函数图。事实上,我甚至没有看到“事件”部分,但我确实有一个标量部分,显示for step in range(NUM_BATCHES):
img, lbl = sess.run([batch_images, batch_labels])
_, loss_value = sess.run([train_op, cost], feed_dict={X: img, Y: lbl, p_keep_conv: 0.8, p_keep_hidden: 0.5})
print("Step %d, loss %1.5f" % (step, loss_value))
sys.stdout.flush()
tf.summary.scalar('loss', loss_value)
summary_writer.add_summary(sess.run(tf.summary.merge_all()), step)
个值(每个批次LOSS_xx
)。
我错过了什么?
答案 0 :(得分:2)
这里的错误是使用TensorFlow操作创建摘要,tf.summary
命名空间中的函数(例如tf.summary.scalar
)也适用于张量。您的代码在每次迭代中创建一个新的独立摘要图表,而不是将所有标量损失值作为同一摘要的一部分。
要解决此问题,您通常只需在培训开始之前创建一次摘要操作。使用这种方法,每步只需要一次运行:
tf.summary.scalar('loss', cost)
all_summaries = tf.summary.merge_all()
for step in range(NUM_BATCHES):
img, lbl = sess.run([batch_images, batch_labels])
_, loss_value, summary = sess.run([train_op, cost, all_summaries], feed_dict={X: img, Y: lbl, p_keep_conv: 0.8, p_keep_hidden: 0.5})
print("Step %d, loss %1.5f" % (step, loss_value))
sys.stdout.flush()
summary_writer.add_summary(summary, step)