TensorFlow CNN图像分类预测报错:期望四维输入实际为三维如何解决
问题修复方案
错误根因
- 输入维度不匹配:你的卷积网络要求输入为4维张量,格式为
(batch_size, 图片高度, 图片宽度, 通道数),但你在预测代码中冗余操作出错:已经通过np.expand_dims(x, axis=0)生成了符合要求的4维数组y,但后续拼接时错误使用了原始3维数组x,最终传入模型的张量维度仅为3维(10, 300, 3),触发维度不兼容报错。 - 预处理逻辑不一致:训练阶段你通过
ImageDataGenerator设置了rescale=1/255的像素归一化操作,但预测阶段直接传入0-255范围的原始像素值,即使维度修复后也会得到错误的预测结果。
修复方法
将原代码中文件上传后的预测循环段,替换为如下代码即可:
for fn in uploaded.keys(): path = '/content/' + fn img = image.load_img(path, target_size=(300, 300)) x = image.img_to_array(img) # 扩展维度为4维,匹配模型输入要求 x = np.expand_dims(x, axis=0) # 和训练阶段保持一致,做像素归一化 x = x / 255.0 classes = model.predict(x, batch_size=10) print(classes) print(classes[0]) if classes[0]>0.5: print(fn + " 是人类") else: print(fn + " 是马")
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

