TensorFlow:是否有计算和更新前k精度的指标?

时间:2017-06-28 10:07:39

标签: machine-learning tensorflow deep-learning metrics

当前tf.contrib.metrics.streaming_accuracy只能计算前1个精度,而不是前k个。作为一种解决方法,这就是我一直在使用的:

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

然而,这并没有给我一种方法来计算每批次的平均流动精度,这对于获得稳定的评估准确性非常有用。我目前正在通过使用其numpy输出手动计算此流式前5精度,但这意味着我将无法在张量板上显示此度量标准。

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

谢谢。

2 个答案:

答案 0 :(得分:8)

您可以将tf.contrib.metrics.streaming_accuracy替换为较低级tf.metrics.meanstreaming_accuracy最终使用的方式 - 您会在各自的文档中找到相似之处。

E.g。 (未经测试)

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

答案 1 :(得分:0)

对于每批的top-k精度,这也适用。

k_val=3
accs = []
for each_bach in range(batch_size):
    acc = tf.keras.metrics.top_k_categorical_accuracy(y_true=tf_class1[each_bach], y_pred=tf_class2[each_bach], k=k_val)
    accs.append(acc)

acc_data_per_batch = tf.reduce_mean(accs)

tf.keras.metrics.top_k_categorical_accuracy 返回 K.mean( 每批nn.in_top_k(y_pred,math_ops.argmax(y_true,axis = -1),k),axis = -1)