【问题标题】:How to smoothly produce Tensorflow auc summaries for training and test sets?如何为训练和测试集顺利生成 Tensorflow auc 摘要?
【发布时间】:2017-09-23 21:01:25
【问题描述】:

Tensorflow describes 编写文件摘要以可视化图形执行。

我设想三个阶段:

  1. 训练数据(优化)
  2. 在训练集上测量准确度(无优化)
  3. 在测试集上测量准确度(没有优化!)

我希望所有阶段都在同一个脚本中,就像在 wide_and_deep tutorial 的评估函数中一样,但使用的是低级 API。我想要三个不同的图表来表示损失或 AUC 等统计数据,每个阶段一个。

假设我使用一个会话,并且在每个阶段我定义一个 AUC 汇总操作:

# define auc
auc, auc_op = tf.metrics.auc(labels, predictions)
# summary scalar to track it
tf.summary.scalar("auc", auc_op, family=family_name)
# merge all summaries for evaluation and later writing
summary_op = tf.summary.merge_all()
...
summary_writer.add_summary(summary, step_num)

共有三个图表,但第一个图表包含所有三个运行,第二个图表包含最后两个运行(见下文)。更糟糕的是,每个阶段都从前一个状态开始。这是有道理的,因为之前阶段的所有变量仍然存在。

我可以为每个阶段使用不同的会话,但这也会丢弃模型。

处理这个问题的顺利方法是什么?

我想清除一些汇总变量。我尝试重新初始化一些变量,查看related 问题,阅读有关名称范围和变量范围的信息,并尝试不为 AUC 重复使用变量,阅读有关 variablessharing 的信息,查看 pruning nodes (虽然我不明白)等等。我还没有让它工作。

我正在使用低级 API。我在 _eval_metric_ops 的高级 API 中看到了类似的内容,但我不明白他们如何“清除”不同的阶段。使用 name_scope?

我是否必须为此保存模型并将其加载到新会话中,或者是否有一些干净的方法可以单独绘制每个摘要?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    指标操作将是局部变量,因此您可以在会话中运行tf.local_variables_initializer(),这将重置您的所有指标。如果您想更有眼光,还可以查看名称中带有“auc”的局部变量集合。执行此操作的高级方法是使用 Estimator,它将为您管理指标。

    【讨论】:

    • 谢谢!我必须使用低级 API。我最终创建了一个新的摘要编写器,not 使用 merge_all,它将继续写入旧指标。相反,我确保只编写最新阶段的指标。