TensorBoard 记录统计数据与训练分开
TensorBoard recording stats separate from training
我正在尝试使用 TensorBoard 显示神经网络训练的一些图表 运行。 (也就是说,训练期间测试和验证准确性的图表,而不仅仅是网络结构的图表。)有一些例子 code
以及本网站上的一些问题,所有这些问题似乎都遵循与示例代码相同的模式。也就是说,模式总是围绕着
这样的东西
summary, _ = sess.run([merged, train_step], ...
所以基本上,运行训练步骤和记录图形显示统计数据的操作正在合并。
就目前而言这很好,但我正在尝试将图形改造为现有程序,该程序不可避免地会以略有不同的方式执行操作,因此示例代码无法按原样运行。我真正想做的是隔离一些 仅记录统计数据 的代码,与现有代码分开进行训练。
如何在主训练循环中记录 TensorBoard 的统计数据,但与进行训练的代码分开?
您可以手动创建存储标量值的 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 显示神经网络训练的一些图表 运行。 (也就是说,训练期间测试和验证准确性的图表,而不仅仅是网络结构的图表。)有一些例子 code
以及本网站上的一些问题,所有这些问题似乎都遵循与示例代码相同的模式。也就是说,模式总是围绕着
这样的东西summary, _ = sess.run([merged, train_step], ...
所以基本上,运行训练步骤和记录图形显示统计数据的操作正在合并。
就目前而言这很好,但我正在尝试将图形改造为现有程序,该程序不可避免地会以略有不同的方式执行操作,因此示例代码无法按原样运行。我真正想做的是隔离一些 仅记录统计数据 的代码,与现有代码分开进行训练。
如何在主训练循环中记录 TensorBoard 的统计数据,但与进行训练的代码分开?
您可以手动创建存储标量值的 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()