当使用张量流进行多类分类时,有没有办法获得每类精度或回忆?Tensorflow中多类分类的类精度和召回率?
例如,如果我有每个批次的y_true和y_pred,是否有功能的方法来获得每个类的精度或召回,如果我有超过2个类。
当使用张量流进行多类分类时,有没有办法获得每类精度或回忆?Tensorflow中多类分类的类精度和召回率?
例如,如果我有每个批次的y_true和y_pred,是否有功能的方法来获得每个类的精度或召回,如果我有超过2个类。
我相信TF不提供这样的功能呢。根据文档(https://www.tensorflow.org/api_docs/python/tf/metrics/precision),它表示标签和预测都将转换为bool,因此它只涉及二进制分类。也许有可能对这些例子进行热门编码,它会起作用吗?但不确定这一点。
我相信你不能用tf.metrics.precision/recall
函数做多类精度,回忆,f1。您可以使用sklearn像这样一类三方案:
from sklearn.metrics import precision_recall_fscore_support as score
prediction = [1,2,3,2]
y_original = [1,2,3,3]
precision, recall, f1 = score(y_original, prediction)
print('precision: {}'.format(precision))
print('recall: {}'.format(recall))
print('fscore: {}'.format(fscore))
这将打印的精度数组,召回值,但只要你喜欢格式化。
下面是一个解决方案,为我工作的n = 6类的问题。如果你有更多的类,这个解决方案可能很慢,你应该使用某种映射而不是循环。
假设您在张量labels
和张量labels
中的logits(或posters)行中有一个热编码类标签。然后,如果n
是类的数量,尝试:
y_true = tf.argmax(labels, 1)
y_pred = tf.argmax(logits, 1)
recall = [0] * n
update_op_rec = [[]] * n
for k in range(n):
recall[k], update_op_rec[k] = tf.metrics.recall(
labels=tf.equal(y_true, k),
predictions=tf.equal(y_pred, k)
)
注意,内部tf.metrics.recall
,变量labels
和predictions
被设定为布尔矢量像在2变量的情况下,其允许使用的功能。
正如问题所要求的那样,这些函数不会为每个类分别计算度量标准。 – Avi