Keras形状识别模型预测时Sequential层输入通道不匹配报错求助
报错根本原因
你定义的Keras模型输入要求是3通道RGB图像(第一层卷积的input_shape=(100,100,3),最后一维3代表通道数),但预测阶段加载图像时指定了color_mode="grayscale",加载出来的是单通道灰度图,输入shape最后一维为1,和模型要求的3通道不匹配,因此触发维度错误。
可选用的解决方法
- 方案1:修改预测阶段的图像加载逻辑,保持和训练阶段输入一致
训练时你用的ImageDataGenerator默认读取3通道RGB图,所以预测时调整加载图像的代码即可,同时注意保持预处理逻辑和训练一致:
# 删除color_mode="grayscale"参数,默认加载RGB图 img = load_img('img.jpeg', target_size=(100, 100)) img = img_to_array(img) # 和训练阶段的rescale操作保持一致,做归一化 img = img / 255.0 img = img.reshape((1, 100, 100, 3)) prediction = model1.predict(img)
- 方案2:如果业务确实需要用灰度图训练和预测,修改全链路配置
如果实际场景都用灰度图,把模型第一层的input_shape改成(100,100,1),同时训练用的flow_from_directory方法要加上color_mode="grayscale"参数,保证训练、验证、预测三个阶段的输入通道数完全一致,重新训练模型即可。 - 方案3:不想重训模型,直接把单通道灰度图转成3通道格式
如果已经完成训练不想重训,可以把加载的灰度图在通道维度复制3次,模拟3通道输入匹配模型要求:
import numpy as np img = load_img('img.jpeg', color_mode="grayscale", target_size=(100, 100)) img = img_to_array(img) # 单通道复制3次,转为3通道格式 img = np.concatenate([img, img, img], axis=-1) # 保持和训练一致的归一化 img = img / 255.0 img = img.reshape((1, 100, 100, 3)) prediction = model1.predict(img)
注意:训练阶段执行的所有预处理操作,预测阶段必须做完全一致的处理,否则预测结果会严重偏离预期。
内容的提问来源于stack exchange,提问作者Hugo_87
相关产品推荐
相关产品推荐

