调用model.predict传入单条样本时报Incompatible layer错误如何解决
问题根因
Keras的predict方法要求输入数据的格式为(批次大小, 特征维度)的二维张量。你直接取my_data_set[0]得到的是形状为(10,)的一维数组,框架会自动将这个一维数组的第一个维度识别为批次大小,认为你传入了10个单特征的样本,和模型要求的单样本10个特征的输入格式不匹配,所以触发维度报错。
排查思路
- 调用
predict前执行print(my_data_set[0].shape),会看到输出为(10,),而正常可运行的my_data_set形状是(6, 10),对比就能发现维度缺失问题。 - 执行
print(model.input_shape)可查看模型期望的输入形状为(None, 10),第一个维度为批次维度,第二个维度是特征数,和传入的一维数组形状不匹配。
解决方案
给单行数据新增一个批次维度即可,常用两种实现方式:
- 使用
np.newaxis扩展维度
print(model.predict(my_data_set[0][np.newaxis, :]))
- 使用
reshape方法调整形状
print(model.predict(my_data_set[0].reshape(1, -1)))
两种方式都会把原本形状为(10,)的数组转为(1, 10)的二维数组,符合模型的输入要求,即可正常得到预测结果。
内容的提问来源于stack exchange,提问作者whitepanda
相关产品推荐
相关产品推荐

