最佳答案
我在理解新的 tf.contrib.summary
API 方面遇到了一点困难。在旧版本中,人们似乎只需要运行 tf.summary.merge_all()
并将其作为一个操作来运行。
但是现在我们有了像 tf.contrib.summary.record_summaries_every_n_global_steps
这样的东西,可以这样使用:
import tensorflow.contrib.summary as tfsum
summary_writer = tfsum.create_file_writer(logdir, flush_millis=3000)
summaries = []
# First we create one summary which runs every n global steps
with summary_writer.as_default(), tfsum.record_summaries_every_n_global_steps(30):
summaries.append(tfsum.scalar("train/loss", loss))
# And then one that runs every single time?
with summary_writer.as_default(), tfsum.always_record_summaries():
summaries.append(tfsum.scalar("train/accuracy", accuracy))
# Then create an optimizer which uses a global step
step = tf.create_global_step()
train = tf.train.AdamOptimizer().minimize(loss, global_step=step)
现在有几个问题:
session.run(summaries)
,我假设精度汇总每次都会被写入,而损失不会被写入,因为它只有在全局步骤被30整除的情况下才会被写入?session.run([accuracy, summaries])
,但是可以只运行 session.run(summaries)
,因为它们在图中有一个依赖关系,对吗?tf.contrib.summary.scalar
(和其他的)采用 step
参数?在3中添加一个控制依赖项,我的意思是这样做:
tf.control_dependencies(summaries):
train = tf.train.AdamOptimizer().minimize(loss, global_step=step)