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

Python 如何比较两个一个热编码列表?,python,opencv,machine-learning,keras,one-hot-encoding,Python,Opencv,Machine Learning,Keras,One Hot Encoding,我在一个包含两个类的大型图像数据集上训练CNN,我对我的验证类做了一个热编码(y_测试): 我想将这些与我的分类器所做的预测进行比较,我还对其进行了热编码,如: y_pred = model.predict_classes(x_test) y_pred = to_categorical(y_pred, num_classes=2) 通过这种比较,我想找到我的分类器哪里出错了,并将分类错误的图像保存到一个新文件夹中。但我认为我根本没有做对比较: for i in range(0, len(y_t

我在一个包含两个类的大型图像数据集上训练CNN,我对我的验证类做了一个热编码(y_测试):

我想将这些与我的分类器所做的预测进行比较,我还对其进行了热编码,如:

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方法,该方法计算一个热编码矩阵,使得每一行都是训练样本的一个热编码标签。在这种情况下,你的比较是不正确的。您需要首先找到元素不相等的位置,然后强制要求,如果其中任何一个元素不正确,则将图像写入文件

因此,首先找到一个热编码向量彼此不对应的所有位置:
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()

可能尝试一下
(y_pred[i]!=y_test[i])。any()
?您是否使用Keras
来进行分类Keras@saremisona好啊谢谢我已经重新标记了你的问题的完整性。顺便说一句,我不知道为什么你要比较一个热编码向量,而你可以只比较实际的标签本身。这更简单,因为你只需要比较一个整数,而不是一个整数数组,因为只有一个热编码。你真是太好了,谢谢!
(predictions*test_labels).sum()