我使用Keras训练图像分类器,测试精度高达98%左右。现在我知道整体准确率是98%,但我想知道每个不同类别/标签的准确性/错误。
Keras是否具有内置功能,或者我必须每个类/标签自行测试一次吗?
更新:谢谢@gionni。我不知道实际的术语是“混淆矩阵”。但这就是我实际需要的东西。话虽如此,是否有生成一个功能?顺便说一下,我必须使用Keras 1.2.2。
答案 0 :(得分:3)
我有类似的问题,所以我可以与你分享我的代码。以下函数计算单个类的准确度:
def single_class_accuracy(interesting_class_id):
def fn(y_true, y_pred):
class_id_preds = K.argmax(y_pred, axis=-1)
# Replace class_id_preds with class_id_true for recall here
positive_mask = K.cast(K.equal(class_id_preds, interesting_class_id), 'int32')
true_mask = K.cast(K.equal(y_true, interesting_class_id), 'int32')
acc_mask = K.cast(K.equal(positive_mask, true_mask), 'float32')
class_acc = K.mean(acc_mask)
return class_acc
return fn
现在 - 如果您想获得0
课程的准确性,可以在编制模型时将其添加到指标中:
model.compile(..., metrics=[..., single_class_accuracy(0)])
如果您希望所有课程的准确性,您可以输入:
model.compile(...,
metrics=[...] + [single_class_accuracy(i) for i in range(nb_of_classes)])
答案 1 :(得分:-1)
可能有更好的选择,但你可以使用它:
import numpy as np
#gather each true label
distinct, counts = np.unique(trueLabels,axis=0,return_counts=True)
for dist,count in zip(distinct, counts):
selector = (trueLabels == dist).all(axis=-1)
selectedX = testData[selector]
selectedY = trueLabels[selector]
print('\n\nEvaluating for ' + str(count) + ' occurrences of class ' + str(dist))
print(model.evaluate(selectedX,selectedY,verbose=0))