2017-06-28 39 views
3

当前tf.contrib.metrics.streaming_accuracy只能计算前1位的准确性,而不是前k位。作为解决办法,这是我一直使用的是什么:TensorFlow:是否有计算和更新最高k精度的度量标准?

tf.reduce_mean(tf.cast(tf.nn.in_top_k(predictions=predictions, targets=labels, k=5), tf.float32)) 

然而,这并没有给我一个方法来计算流精度在每个批次,这将是在获得稳定的评价精度有用平均。我目前通过使用它的numpy输出手动计算这个流最高精度5,但这意味着我将无法在tensorboard上可视化这个度量。

有没有办法通过创建一个accuracy_update函数来实现一个更简单的实现,或者是否有一个现有的函数已经做到了这一点?

谢谢。

回答

4

你可以用低级tf.metrics.mean代替tf.contrib.metrics.streaming_accuracy的使用,这是最终由streaming_accuracy使用的方式 - 你会发现他们各自的文档有相似之处。

E.g. (未测试)

tf.metrics.mean(tf.nn.in_top_k(predictions=predictions, targets=labels, k=5)) 
+0

感谢您的咨询!该功能完全按照预期工作。 – kwotsin

+0

什么数据类型和形状是你的预测和标签? 我也试图使用这个函数,但我得到一个InvalidArgumentError说目标[0]超出范围.. – GPhilo

+0

没关系,发现问题(我使用argmax(logits)作为'预测'而不是自己的logits ) – GPhilo