【发布时间】:2018-08-11 12:39:36
【问题描述】:
我在理解新的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),因为它们在图中有依赖关系,对吧? - 如果 2) 为真,我不能只在训练步骤中添加一个控制依赖项,以便在每次列车运行时编写摘要吗?或者这是一种不好的做法?
- 对于将要同时评估的事物通常使用控制依赖项有什么缺点吗?
- 为什么
tf.contrib.summary.scalar(和其他人)接受step参数?
通过在 3) 中添加控制依赖项,我的意思是这样做:
tf.control_dependencies(summaries):
train = tf.train.AdamOptimizer().minimize(loss, global_step=step)
【问题讨论】:
-
请从您的编辑中创建一个答案。
标签: python tensorflow tensorboard