我在一个包含两个类的图像的大型数据集上训练CNN,并且我已经对我的验证类(y_test)进行了一次热编码:
# Load the assemblies
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
我想将这些与我的分类器所做的预测进行比较,我也将其编码为:
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)
有人知道我做错了吗?
答案 0 :(得分:1)
我假设您正在使用Keras to_categorical
方法,该方法计算一个热门的编码矩阵,使得每一行都是训练样本的单热编码标签。在这种情况下,您的比较是不正确的。您需要首先找到元素不相等的位置,然后强制它们如果其中任何一个不正确,则将图像写出来归档。
因此,首先找到one-hot编码向量彼此不对应的所有位置:y_pred[i] != y_test[i]
然后才会在其上施加any
方法,检查是否有任何元素#39; t等于(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)
答案 1 :(得分:0)
只需将数组彼此相乘并将结果相加即可得出正确预测的总数。
(predictions*test_labels).sum()