python - 使用 keras 将预测图像类与实际图像类进行比较
问题描述
我正在训练一个 keras 模型来识别猫、狗和马的图像。
到目前为止,我已经对我的数据进行了一次热编码(因为这是一个多类分类问题),训练了我的模型并调用了预测。
def read_and_process_images(list_of_images):
X = [] #images
y = [] #labels
for image in list_of_images:
try:
X.append(cv2.resize(cv2.imread(image, cv2.IMREAD_COLOR),(nrows, ncolumns), interpolation = cv2.INTER_CUBIC))
if 'dog' in image:
y.append(0)
elif 'cat' in image:
y.append(1)
elif 'horse' in image:
y.append(2)
except Exception as e:
print(str(e))
return X, y
...
X_test, y_test = read_and_process_images(test_imgs)
x = np.array(X_test)
test_datagen = ImageDataGenerator(rescale = 1./255)
i = 0
text_labels = []
plt.figure(figsize = (30,20))
for batch in test_datagen.flow(x, batch_size = 1):
pred = model.predict(batch)
print(np.argmax(pred))
if np.argmax(pred) == 0 :
text_labels.append('dog')
elif np.argmax(pred) == 1:
text_labels.append('cat')
else:
text_labels.append('horse')
plt.subplot(5 / columns + 1, columns, i+1)
plt.title('I think this is a ' + text_labels[i])
imgplot = plt.imshow(batch[0])
i += 1
if i % 10 == 0:
break
plt.show()
该模型似乎运行良好。我通常会得到 7-10 个正确的预测,具体取决于批量大小。但是,我不明白 model.predict 如何选择批次,因此无法将实际值与预测值进行比较。当我尝试执行以下操作时:
y_pred = model.predict(x, batch_size=1)
matrix = confusion_matrix(y_test, y_pred.argmax(axis=1))
我得到的混淆矩阵完全是荒谬的(例如它告诉我它只有一只猫是正确的,但我可以清楚地看到一些批次它得到了更多正确)。有人可以向我解释一下 .predict 函数是如何选择批次的,以及我如何成功地将预测值与实际测试值进行比较?先感谢您。
解决方案
推荐阅读
- mysql - 我收到“子查询返回多行”错误。但是我想返回多行
- reporting-services - SSRS:占位符不显示由用户参数获得的数据集值(查询类型)定义的值
- java - java如何解压列表并将元素一一添加到数据表中?
- r - 如何将数据放入 shapefile 的六边形并绘制它?
- python - 在 Python 中迭代 CSV 阅读器对象
- menu - ICP4D - 已安装但无法创建新项目
- vega-lite - 当图例中使用的查找中链接的字段时,Vega-lite 图表失败
- php - PHP::Imagick 从合成图像创建临时文件,用于通过标签显示
- azerothcore - 艾泽拉斯核,从改变模型到改变种族的欺骗之球
- python - 在 NiFi Container 中添加额外的 python 模块