在tensorflow
验证监视器流式传输auc中,它对流式传输意味着什么?
假设我们设置了every_n_steps = 100
,那么每100步就会调用一次监视器。
此外,假设验证监视器的input_fn函数将产生数据流。让我们假设10批。
情况1:每次调用验证监视器时都会重置auc状态,在每个验证步骤中,10个批次都会进行流式传输。
情况2:auc状态未重置,因此流式auc是从第一次调用验证监视器计算出来的。即,第一输出(100步)从10批计算,第二验证输出(200步)基于第一次调用后的流auc以及10个批次输入计算。第三输出(300步)步骤())基于第二次呼叫后的流式传输auc以及10次馈入的数据计算。
问题1,实施了哪一个方案? 问题2,如果我们使用tf.metrics.auc
,有什么区别?他们在this doc说:
为了估计数据流上的度量,该函数创建update_op操作,更新这些变量并返回auc。
所以这也计算了流式的auc?!
答案 0 :(得分:0)
答案是案例1. ValidationMonitor
调用Estimator的evaluate(),它从检查点重新加载模型。局部变量(包括度量标准所依据的统计信息)不会保存在检查点中;重新加载检查点后,它们将从头开始重新初始化。
指标始终是流式传输,因此可以组合多个评估步骤(由eval_steps
ValidationMonitor
参数控制)。但是这种聚合仅在evaluate()
步骤内。
对于tf.contrib.streaming_auc
vs tf.metrics.auc
,后者位于核心TensorFlow中,并且具有API稳定性保证(在contrib
作为streaming_auc
挂出后,它可能已移至那里一点点)。它们应该是等价的,除非contrib
版本获得您想要使用的某些新功能(此处不适用),否则核心版本更可取。