为什么Keras模型predict函数会报图像形状不匹配的警告与错误?
错误根因
- 模型定义时的输入要求为
(批量大小, 28, 28)格式,model.predict()会默认将输入的第一维识别为批量维度。你直接传入test_images[2]时,其原生shape为(28, 28),TensorFlow会自动把第一个28识别为批量大小,实际送入模型的输入维度变成了(28, 28),和模型预期的(None, 28, 28)维度不匹配,所以触发报错。 - 训练阶段你对训练集做了
/255的归一化处理,但预测时直接传入原始0-255范围的像素值,即使维度修正后也会导致预测结果偏差,必须同步做归一化。
修复方案
以下两种修改方式二选一即可:
- 用
np.expand_dims为单张样本手动新增批量维度,同时完成归一化:
import numpy as np # axis=0表示在最前面新增批量维度,处理后输入shape为(1,28,28) pred_res = model.predict(np.expand_dims(test_images[2]/255, axis=0)) # 取概率最大的类别作为预测结果 pred_label = np.argmax(pred_res)
- 用切片方式取单张样本,切片操作会自动保留批量维度:
# test_images[2:3]的shape原生为(1,28,28),不需要额外调整维度 pred_res = model.predict(test_images[2:3]/255) pred_label = np.argmax(pred_res)
内容的提问来源于stack exchange,提问作者BossWangST
相关产品推荐
相关产品推荐

