当前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函数来实现更简单的实现,或者是否有现有的函数已经这样做了?
谢谢。
答案 0 :(得分:8)
您可以将tf.contrib.metrics.streaming_accuracy
替换为较低级tf.metrics.mean
,streaming_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)