TensorBoard 记录统计数据与训练分开
Posted
技术标签:
【中文标题】TensorBoard 记录统计数据与训练分开【英文标题】:TensorBoard recording stats separate from training 【发布时间】:2018-11-20 00:19:41 【问题描述】:我正在尝试使用 TensorBoard 显示神经网络训练运行的一些图表。 (即训练期间的测试和验证准确度图,而不仅仅是网络结构。)有一些例子code
以及本网站上的一些问题,所有这些似乎都遵循与示例代码相同的模式。也就是说,模式总是围绕着类似
summary, _ = sess.run([merged, train_step], ...
所以基本上,运行训练步骤和记录统计数据以显示图表的操作被混为一谈。
就目前而言这很好,但我正在尝试将图表改进为现有程序,该程序不可避免地会以稍微不同的方式做事,因此示例代码不会按原样工作。我真正想做的是隔离一些只记录统计数据的代码,与现有代码分开来进行训练。
您如何在主训练循环中记录 TensorBoard 的统计数据,但与进行训练的代码分开?
【问题讨论】:
换句话说,在每个训练步骤中,您都会运行一些代码,这些代码最终会返回一些标量值(称为准确度),并且您想使用单独的sess.run(...)
将其写入张量板摘要,我明白了吗你的问题正确吗?
@openmark 在每个训练步骤中,我都会运行一些最终返回标量值的代码,并且我想在单独的代码行中将其写入张量板摘要中,是的。编写张量板摘要是否有理由需要涉及sess.run
?如果是这样,那么是的,在单独的调用中。
【参考方案1】:
您可以手动创建存储标量值的tf.Summary
对象并将其传递给tf.summary.FileWriter
,如下例所示:
summary_writer = tf.summary.FileWriter("path_to_log_dir")
# ...
for i in range(max_training_steps):
# compute the values of interest
scalar_value_1 = ...
# ...
scalar_value_n = ...
# manually create tf.Summary object
summary = tf.Summary(
value=[tf.Summary.Value(tag="Metrics_1", simple_value=scalar_value_1),
# ...
tf.Summary.Value(tag="Metrics_n", simple_value=scalar_value_n)])
summary_writer.add_summary(summary, i)
# ...
summary_writer.close()
或者,您可以使用tf.placeholder
作为张量来定义tf.summary.scalar()
操作并在运行时提供实际值:
scalar_pl_1 = tf.placeholder(tf.float32)
tf.summary.scalar("Metrics_1", scalar_pl_1)
# ...
scalar_pl_n = tf.placeholder(tf.float32)
tf.summary.scalar("Metrics_n", scalar_pl_n)
# Merge all summaries
merged = tf.summary.merge_all()
summary_writer = tf.summary.FileWriter("path_to_log_dir")
with tf.Session() as sess:
for i in range(max_training_steps):
# compute scalar values of interest
scalar_value_1 = ...
scalar_value_n = ...
feed_dict = scalar_pl_1: scalar_value_1, scalar_pl_n: scalar_value_n
summary = sess.run(merged, feed_dict=feed_dict)
summary_writer.add_summary(summary, i)
# ...
summary_writer.close()
【讨论】:
以上是关于TensorBoard 记录统计数据与训练分开的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow学习教程------tensorboard网络运行和可视化
TensorFlow - 从 TensorBoard TFEvent 文件中导入数据?