2017-09-23 48 views
0

Tensorflow describes编写文件摘要以可视化图形执行。如何顺利生成Tensorflow auc摘要用于培训和测试集?

我设想了三个阶段:(!没有优化)

  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?

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

three graphs

回答

0

度量OPS将是局部变量,所以你可以在你的会话中运行tf.local_variables_initializer(),这将重置所有指标。如果你想要更具辨别性,你也可以通过名称中带有“auc”的那些局部变量集合来查看。执行此操作的高级方法是使用Estimator,它将为您管理指标。

+1

谢谢!我必须使用低级API。我最终创建了一个新的总结作者,而不是*使用merge_all,它将继续写入旧的度量标准。相反,我确保只编写最新阶段的指标。 – dfrankow