我在一个包含两个类别的大型图像数据集上训练 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
计算单热编码矩阵的方法,使得每一行都是训练样本的单热编码标签。在那种情况下,您的比较是不正确的。您需要首先找到元素不相等的地方,然后强加,如果其中任何一个不正确,则将图像写入文件。
因此,首先找到单热编码向量彼此不对应的所有位置: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)
关于python - 如何比较两个一个热编码列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49058179/