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
相关产品推荐
相关产品推荐

