使用MobileNetV2搭建图像分类器出现输入维度不匹配报错如何解决?
报错核心原因
你的数据批次构造逻辑错误,导致输入模型的批量数据维度不符合要求:
模型要求的输入维度是 (batch_size, 高度, 宽度, 通道数) 即(None, 160, 160, 3),但你实际喂入的批次维度是(32, 160, 3),少了一个高度/宽度维度,说明你把32张单张为(160,160,3)的图像堆叠成批次时,没有在最前面新增batch维度,反而沿着图像的高度/宽度维度做了拼接。
排查修复方案
- 检查自定义数据生成器的批次拼接逻辑:
如果你是手动把单张图像组合成批次,不要直接用np.concatenate拼接未扩展维度的单张图,正确做法是先给每张单图新增batch维度后再拼接,或者直接用np.stack沿第0维堆叠:# 错误写法示例 # batch = np.concatenate([img1, img2, ..., img32]) # 会得到(32*160,160,3)或者(160, 32*160,3),调整后就会出现你遇到的(32,160,3)问题 # 正确写法:单图列表每个元素形状为(160,160,3),沿第0维堆叠成批次 batch = np.stack([img1, img2, ..., img32], axis=0) # 输出形状为(32, 160, 160, 3),符合模型要求 - 如果你用
tf.data.Dataset构造数据管道:
检查resize操作的输入参数是否正确设置为(160,160),确认你调用了batch(32)方法来自动给数据加batch维度。
额外代码问题提醒
你当前的损失函数配置存在参数不匹配问题:输出层已经设置了activation="softmax",说明输出是经过归一化的概率值,损失函数里的from_logits=True需要改为from_logits=False,否则会导致损失计算错误,影响模型收敛效果。
内容的提问来源于stack exchange,提问作者belen
相关产品推荐
相关产品推荐

