Keras模型预测时报形状不匹配错误,实际检查形状符合预期
解决Keras预测时的形状不匹配问题
这种看起来矛盾的报错我可太熟了!明明自己查了输入形状是对的,怎么模型还不认?其实问题出在Keras对输入维度的隐性要求上——你的模型期望接收的是批量输入数据,而不是单个样本的一维数组。
问题到底出在哪?
你看到sequences_matrix.shape输出是(150,),这说明这是一个一维数组,代表单个长度为150的样本。但Keras的predict方法默认要求输入是批量格式:也就是形状为(样本数量, 特征数)的二维数组。当你直接传入一维数组时,Keras会误把它解析成「150个样本,每个样本只有1个特征」,这就和你的输入层期望的「每个样本150个特征」完全不匹配,所以才会抛出expected Inputs to have shape (150,) but got array with shape (1,)的错误。
快速解决办法
只需要给你的输入数组增加一个维度,把它变成「1个样本,150个特征」的二维格式就行,有几种简单的方式:
- 用NumPy的
expand_dims:import numpy as np sequences_matrix = np.expand_dims(sequences_matrix, axis=0) # 现在shape会变成(1, 150),符合模型要求 - 或者用索引语法快速加维度:
sequences_matrix = sequences_matrix[np.newaxis, :] - 如果用TensorFlow张量的话,也可以用
tf.expand_dims:import tensorflow as tf sequences_matrix = tf.expand_dims(sequences_matrix, 0)
调整完形状后再运行predict = model.predict(sequences_matrix),应该就能正常执行了。
补充说明
你的输入层定义的Input(shape=(150,))是在描述单个样本的形状,而Keras的所有训练/预测方法都默认处理批量数据——这是框架设计时为了兼容批量计算优化的要求,所以哪怕你只预测一个样本,也得把它包装成批量的格式才行。
内容的提问来源于stack exchange,提问作者Faraz Akhtar
相关产品推荐
相关产品推荐

