【问题标题】:How are the new tf.contrib.summary summaries in TensorFlow evaluated?如何评估 TensorFlow 中的新 tf.contrib.summary 摘要?
【发布时间】: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)

现在有几个问题:

  1. 如果我们只是在循环中运行session.run(summaries),我假设每次都会写入准确度摘要,而损失则不会,因为它只有在全局步长可被 30 整除时才会写入?
  2. 假设摘要自动评估它们的依赖关系,我不需要运行 session.run([accuracy, summaries]),而是可以运行 session.run(summaries),因为它们在图中有依赖关系,对吧?
  3. 如果 2) 为真,我不能只在训练步骤中添加一个控制依赖项,以便在每次列车运行时编写摘要吗?或者这是一种不好的做法?
  4. 对于将要同时评估的事物通常使用控制依赖项有什么缺点吗?
  5. 为什么tf.contrib.summary.scalar(和其他人)接受step 参数?

通过在 3) 中添加控制依赖项,我的意思是这样做:

tf.control_dependencies(summaries):
    train = tf.train.AdamOptimizer().minimize(loss, global_step=step)

【问题讨论】:

  • 请从您的编辑中创建一个答案。

标签: python tensorflow tensorboard


【解决方案1】:

应要求将答案从编辑移至自行回答


我只是稍微玩了一下,似乎如果将tf.control_dependenciestf.record_summaries_every_n_global_steps 结合起来,它的行为与预期一样,并且只会在每第 n 步记录一次摘要。但是如果它们在一个会话中一起运行,例如session.run([train, summs]),则每隔一段时间就会存储一次摘要,但不是每第 n 步都存储一次。我用 n=2 对此进行了测试,而第二种方法的摘要通常以奇数步编写,而使用控制依赖方法时,它总是以偶数步编写。

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2018-08-22
    • 2016-10-28
    • 2019-05-05
    • 1970-01-01
    • 2018-12-09
    • 2018-10-04
    • 2018-09-01
    • 2021-12-16
    相关资源
    最近更新 更多