【问题标题】:How to compare two one hot encoded lists?如何比较两个热编码列表?
【发布时间】:2018-03-01 20:28:05
【问题描述】:

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

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

【问题讨论】:

  • 也许可以试试(y_pred[i] != y_test[i]).any()
  • 你在使用 Keras to_categorical
  • @rayryeng 是的,我正在使用 Keras
  • @saremisona 好的。谢谢。为了完整性,我已经重新标记了您的问题。顺便说一句,当您可以只比较实际标签本身时,我不确定为什么要比较 one-hot 编码向量。它更简单,因为由于 one-hot 编码,您只比较一个整数而不是整数数组。
  • 你真是太好了,谢谢!

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    (predictions*test_labels).sum()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      相关资源
      最近更新 更多