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

TensorFlow: Is there a metric to calculate and update top k accuracy?

目前tf.contrib.metrics.streaming_accuracy只能计算top 1的准确率,不能计算top k。作为解决方法,这就是我一直在使用的方法:

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

但是,这并没有给我一种方法来计算每个批次的平均流准确度,这对于获得稳定的评估准确度很有用。我目前正在通过使用它的 numpy 输出手动计算这个流式传输的前 5 名准确度,但这意味着我将无法在张量板上可视化这个指标。

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

谢谢。

您可以将您对 tf.contrib.metrics.streaming_accuracy 的使用替换为较低级别的 tf.metrics.mean,顺便说一句,最终由 streaming_accuracy 使用 - 您会发现它们各自的相似之处文档。

例如(未测试)

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

对于每批次的前 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 returns K.mean( nn.in_top_k(y_pred, math_ops.argmax(y_true, 轴=-1), k), 轴=-1) 每批