You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ResNet模型预测时遭遇输入形状不兼容ValueError问题咨询

解决ResNet模型预测时的输入形状不兼容ValueError

我太熟悉这个坑了!你碰到的问题核心在于Keras/TensorFlow的模型默认接收批量输入,但你传入的是单张图片的形状。

先拆解下错误信息:expected shape=(None, 45, 45, 3)里的None代表批量维度(可以理解为一次处理的图片数量),模型期望输入是「批量数 × 高度 × 宽度 × 通道数」的结构;而你传入的单张图片是(45,45,3),没有批量维度,这时候model.predict()会误把第一个维度当成批量数,所以才会提示发现(None,45,3)——它把45当成了批量大小,剩下的两个维度当成了高度和通道数,自然和模型要求的结构不匹配。

再看你的代码,问题就出在直接把单张预处理后的图片传给predict:

preds = model.predict(preprocess_input(img_reverted))

解决方法很简单:给输入增加一个批量维度

你只需要用np.expand_dims()(或者TensorFlow的tf.expand_dims())给预处理后的图片在第0位增加一个维度,把(45,45,3)变成(1,45,45,3),代表「批量大小为1的单张图片」,这样就完全符合模型的输入要求了。

修改后的完整代码如下:

data=list(uploaded.keys())
image=cv2.imread(data[0])
img_reverted=cv2.bitwise_not(image)

# 预处理图片,然后增加批量维度
processed_img = preprocess_input(img_reverted)
processed_img_batch = np.expand_dims(processed_img, axis=0)
print(np.shape(processed_img_batch))  # 这里会输出(1,45,45,3),和模型期望的结构匹配

preds = model.predict(processed_img_batch)
print('Predicted:', decode_predictions(preds, top=3)[0])

额外验证小技巧

修改后可以先打印processed_img_batch的形状,确认是(1,45,45,3)再传给模型,这样就能彻底避免这类形状不兼容的问题。

内容的提问来源于stack exchange,提问作者Aiden Yun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:33:10