Keras搭建LSTM多分类模型报输入维度不兼容错误如何解决
报错原因
该报错由LSTM层的输入维度要求与实际传入的维度不匹配导致:
- Keras框架中LSTM是循环神经网络层,默认要求输入为3维张量,维度格式为
(批量大小, 时间步数量, 单时间步特征数),即输入维度ndim=3 - 你当前为LSTM层设置的
input_shape=(7,)对应2维输入,张量形状为(批量大小, 7),ndim=2,不符合LSTM层的输入要求,因此触发维度不匹配报错。
另外你贴的代码里LSTM层的kernel_initializer = initializer参数后缺少逗号,即使维度问题修复,也会触发语法错误,修改时需要补上。
修复方案
根据你的数据属性二选一即可:
- 如果你的数据集是普通结构化表格数据(7个数值特征无序列/时序属性),不需要使用LSTM层,直接替换为适配2维表格输入的全连接层即可,修正后代码如下:
def create_keras_model(): initializer = tf.keras.initializers.GlorotNormal() return tf.keras.models.Sequential([ tf.keras.layers.Input(shape=(7,)), tf.keras.layers.Dense(units=20, kernel_initializer=initializer, activation='relu'), tf.keras.layers.Dense(4), tf.keras.layers.Softmax(), ])
- 如果你确实需要用LSTM处理序列类数据,需要为输入增加时间步维度,将LSTM层的输入形状改为3维格式,同时将传入模型的训练、验证数据整体reshape为
(样本总数, 时间步长度, 特征数)的形状。例如你的7个特征对应单个时间步的序列特征,可按如下方式修改模型:
def create_keras_model(): initializer = tf.keras.initializers.GlorotNormal() return tf.keras.models.Sequential([ LSTM(units=20, kernel_initializer=initializer, input_shape=(1,7)), tf.keras.layers.Dense(4), tf.keras.layers.Softmax(), ])
对应的数据reshape可参考代码:X_train = X_train.reshape(-1, 1, 7),测试集、验证集做相同处理即可。
内容的提问来源于stack exchange,提问作者Alwani
相关产品推荐
相关产品推荐

