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

How to compare two one hot encoded lists?

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

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)

我想通过这个比较完成的是找到我的分类器在哪里出错,并将分类错误的图像保存在一个新文件夹中。但我认为我根本没有做正确的比较:

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

有人知道我做错了什么吗?

我假设您使用的是 Keras to_categorical 方法,该方法计算 one-hot 编码矩阵,使得每一行都是训练样本的 one-hot 编码标签。在那种情况下,您的比较是不正确的。您需要先找到元素不相等的地方,然后强加,如果其中任何一个不正确,则将图像写入文件。

因此,首先找到所有 one-hot 编码向量彼此不对应的位置: y_pred[i] != y_test[i] 然后才对它施加 any 方法来检查任何不相等的元素 (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)

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

(predictions*test_labels).sum()