TensorFlow Keras模型输入形状不兼容报错求助:MyModel层输入0维度不匹配
问题原因与解决办法
这个问题我碰到过好多次,核心是模型期望的输入包含batch维度,但你传入的张量少了这一层。
先拆解报错信息:你的模型"MyModel"期望输入形状是(None, 30, 128, 128, 3),这里的None代表可变的batch size,后面的30, 128, 128, 3是单个样本的完整形状。而你传入的train_features[27]形状是(30, 128, 128, 3),这其实是单个样本的形状——但model.predict()默认要求输入是「批量数据」,也就是第一个维度必须是batch size。
当你直接把4维张量传给predict时,Keras会自动把第一个维度(30)当成batch size,把剩下的(128,128,3)当成单个样本的形状,这就和模型期望的单个样本形状(30,128,128,3)完全不匹配,所以才会报这个错。
解决办法:给输入添加batch维度
只需要把你的4维张量变成5维(加上batch size为1的维度),让Keras能正确识别输入结构就行,有几种简单的实现方式:
方法1:用numpy扩展维度
import numpy as np # 在第0位添加batch维度,形状变成(1, 30, 128, 128, 3) preds = model.predict(np.expand_dims(train_features[27], axis=0))
方法2:用TensorFlow扩展维度
import tensorflow as tf preds = model.predict(tf.expand_dims(train_features[27], axis=0))
方法3:用Python切片语法快速添加
# np.newaxis等价于添加一个维度,...表示保留后面所有维度 preds = model.predict(train_features[27][np.newaxis, ...])
另外可以顺便检查下你的模型输入层定义,确认是不是确实需要接收(30,128,128,3)的单样本(比如处理30帧连续图像的场景),如果输入层定义是Input(shape=(30,128,128,3)),那上面的解决办法就完全适用。
内容的提问来源于stack exchange,提问作者RACHID BEN ABDELMALEK
相关产品推荐
相关产品推荐

