如何比较两个一个热编码列表?
How to compare two one hot encoded lists?
我正在用两个 类 的大型图像数据集训练 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
方法,该方法计算 one-hot 编码矩阵,使得每一行都是训练样本的 one-hot 编码标签。在那种情况下,您的比较是不正确的。您需要先找到元素不相等的地方,然后强加,如果其中任何一个不正确,则将图像写入文件。
因此,首先找到所有 one-hot 编码向量彼此不对应的位置: 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()
我正在用两个 类 的大型图像数据集训练 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
方法,该方法计算 one-hot 编码矩阵,使得每一行都是训练样本的 one-hot 编码标签。在那种情况下,您的比较是不正确的。您需要先找到元素不相等的地方,然后强加,如果其中任何一个不正确,则将图像写入文件。
因此,首先找到所有 one-hot 编码向量彼此不对应的位置: 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()