每个标签/混淆矩阵的输出错误率

时间:2017-11-10 09:43:08

标签: tensorflow keras

我使用Keras训练图像分类器,测试精度高达98%左右。现在我知道整体准确率是98%,但我想知道每个不同类别/标签的准确性/错误。

Keras是否具有内置功能,或者我必须每个类/标签自行测试一次吗?

更新:谢谢@gionni。我不知道实际的术语是“混淆矩阵”。但这就是我实际需要的东西。话虽如此,是否有生成一个功能?顺便说一下,我必须使用Keras 1.2.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))