如何评估 TensorFlow 中的新 tf.contrib.summary 摘要?

Posted

技术标签:

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

【问题讨论】:

请从您的编辑中创建一个答案。 【参考方案1】:

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


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

【讨论】:

以上是关于如何评估 TensorFlow 中的新 tf.contrib.summary 摘要?的主要内容,如果未能解决你的问题,请参考以下文章

DNNCLassifier Tensorflow 上的 label_keys 类型错误

如何在 Tensorflow 的训练之间进行评估

如何在 Tensorflow 对象检测 api 中评估预训练模型

如何在 tensorflow 2.0 中更改用于训练和评估的图像数量?

如何在 Tensorflow Estimator 的每个全局步骤中获取训练损失并评估损失?

tensorflow 使用混淆矩阵进行评估