我在一个包含两类的大型图像数据集上训练一个卷积神经网络(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(): # 更改 image = x_test_copy[i] path = 'path' cv2.imwrite(os.path.join(path , str(i)+'.jpg'), image)