TensorFlow训练石头剪刀布模型报输入形状不兼容ValueError
报错产生原因
- 本质是输入模型的验证集图像尺寸,和模型预设的输入尺寸不匹配,问题出在更换DSLR相机后的预处理逻辑缺失。
- 你使用的参考代码基于普通网络摄像头适配,预训练模型要求固定输入形状为
(224, 224, 3),普通摄像头采集的图像经过原代码的预处理流程后刚好符合该尺寸要求。 - 更换DSLR后,相机输出的原始分辨率更高,原代码里针对普通摄像头的隐式尺寸适配逻辑失效。从报错时序可以看到,训练阶段的7个批次已经正常执行完成,说明训练集经过
augment.flow的数据增强流水线时已经被正确缩放为224×224;但验证集testX没有做同步的尺寸对齐,最终喂入模型的是290×290分辨率的图像,触发形状不匹配错误。
修复方案
- 显式给所有输入模型的图像加统一的尺寸缩放逻辑,强制对齐到模型要求的224×224分辨率,不要依赖采集设备的默认输出尺寸。
- 如果你是实时采集单反画面生成数据集,在帧读取后立刻加resize操作:
import cv2 # 读取到单反帧后执行 frame = cv2.resize(frame, (224, 224))
- 如果你的
testX是已经加载到内存的数据集,直接批量转换尺寸即可:
import numpy as np import cv2 # 批量调整测试集所有图像尺寸 testX = np.array([cv2.resize(img, (224, 224)) for img in testX])
- 检查数据增强实例
augment的初始化参数,明确配置target_size=(224, 224),避免不同数据源下自动生成尺寸的逻辑导致训练/验证集尺寸不一致。
补充说明:不要随意修改模型的输入尺寸适配290分辨率,你用的预训练权重是在224×224的图像上训练得到的,随意改输入尺寸会导致预训练特征提取失效,模型精度会大幅下降。
内容的提问来源于stack exchange,提问作者emiliorivas16
相关产品推荐
相关产品推荐

