我一直在尝试添加一些有用的中间计算,用于将我的损失函数导出到我的评估eval_metric_ops
的{{1}}字典中。我把它们包裹在tf.metrics.mean
的电话中,因为它似乎符合我的需要。
此函数的返回类型是EstimatorSpec
tuple
,其中(mean, update_op)
表面上是当前均值,mean
是计算新均值并返回的操作它
但是,当我尝试对其进行评估时,我发现update_op
和value
字段似乎有所不同。就我所见,文档没有对此作出解释。
例如,请使用以下代码段:
update_op
返回以下内容:
test_tensor = tensorflow.constant([[1, 2, 3], [4, 5, 6]])
test_mean = tensorflow.metrics.mean(test_tensor)
sess = tensorflow.Session()
sess.run(tensorflow.global_variables_initializer())
sess.run(tensorflow.local_variables_initializer())
print sess.run(test_mean)
print sess.run(test_mean)
print sess.run(test_mean)
print sess.run(test_mean)
print sess.run(test_mean[0])
print sess.run(test_mean)[1]
元组的第二个值显然是输入值的总体平均值,但是左侧值似乎是向(0.0, 3.5)
(1.75, 3.5)
(2.3333333, 3.5)
(2.625, 3.5)
3.5
3.5
渐近,而采用test_mean的零索引并对其进行评估会导致直接3.5
,而不是通过评估整个操作然后获取索引得到的值。
这里发生了什么?