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

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

我在一个包含两个类别的大型图像数据集上训练 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/

相关文章:

Java OPENCV 模板匹配给出错误的坐标?

python - Python 中的函数式与命令式风格

python - 如何在不使用类的情况下在 Python 中反转优先级队列?

c++ - OpenCV 3.1.0 无法使用 CMake 进行编译

python - openCV python 根据边问题查找轮廓

machine-learning - 将图像输入 tensorflow

python - graphlab create sframe 如何获取 SArray 中位数

machine-learning - 求解器参数 'test_iter' 在测试阶段更改标签值

python - 调整列表的 numpy 数组的大小,以便所有列表都具有相同的长度,并且可以正确推断 numpy 数组的 dtype

python - 如何在字符串文字中放置实际的反斜杠(不将其用于转义序列)?