TensorFlow Keras调用predict时np.array创建形状与原数据不符
报错原因分析
- 形状没有发生变化,你观察到的
np.array(x[0])[0].shape为(128, 3)是因为你主动取了三维数组的第一维第0个元素,x[0]本身转成NumPy数组后形状依然是(128, 128, 3),该操作和你传入predict的输入无关,属于测试代码的误导。 - 报错核心是Keras的
model.predict()要求输入必须携带批次维度,即输入形状第一个位为批次大小,你当前传入的单张图片形状为(128, 128, 3),缺少批次维度,predict会自动将第一个维度128识别为批次大小,认为你传入了128个形状为(128, 3)的样本,和模型要求的单样本形状(128, 128, 3)不匹配,因此抛出形状错误。
修复方案
两种常用方法都可以给单张图片补充批次维度:
- 使用
np.expand_dims扩展维度
model.predict(np.expand_dims(x[0], axis=0))
- 使用
np.newaxis插入批次维度
model.predict(np.array(x[0])[np.newaxis, ...])
内容的提问来源于stack exchange,提问作者Danial
相关产品推荐
相关产品推荐

