如何比较两个热门编码列表?

时间:2018-03-01 20:28:06

标签: python opencv machine-learning keras one-hot-encoding

我在一个包含两个类的图像的大型数据集上训练CNN,并且我已经对我的验证类(y_test)进行了一次热编码:

# Load the assemblies
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")

我想将这些与我的分类器所做的预测进行比较,我也将其编码为:

y_test = to_categorical(y_test, num_classes=2)

我想通过这种比较来实现的目的是找到我的分类器出错的地方,并保存在新文件夹中被错误分类的图像。但我不认为我正在进行比较:

y_pred = model.predict_classes(x_test)
y_pred = to_categorical(y_pred, num_classes=2)

有人知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

我假设您正在使用Keras to_categorical方法,该方法计算一个热门的编码矩阵,使得每一行都是训练样本的单热编码标签。在这种情况下,您的比较是不正确的。您需要首先找到元素不相等的位置,然后强制它们如果其中任何一个不正确,则将图像写出来归档。

因此,首先找到one-hot编码向量彼此不对应的所有位置:y_pred[i] != y_test[i]然后才会在其上施加any方法,检查是否有任何元素#39; t等于(y_pred[i] != y_test[i]).any()。这意味着您的if语句需要更改:

for i in range(0, len(y_test)):
    if (y_pred[i] != y_test[i]).any(): # Change
        image = x_test_copy[i]
        path = 'path'
        cv2.imwrite(os.path.join(path , str(i)+'.jpg'), image)

答案 1 :(得分:0)

只需将数组彼此相乘并将结果相加即可得出正确预测的总数。

(predictions*test_labels).sum()