LSTM模型model.fit()报错:输入形状不兼容问题求助
解决LSTM输入形状不兼容问题
错误原因
LSTM层要求输入是3D张量,格式为(batch_size, timesteps, features)(批量大小、时间步长、特征数)。你的x_train是2D形状(320,6),只包含样本数和特征数,缺少时间步维度;同时你把input_shape设成了(320,6),这是错误的——input_shape只需要指定(timesteps, features),批量大小由batch_size参数自动处理(对应形状里的None)。
修复步骤
- 给
x_train增加时间步维度,把2D张量转成3D:
使用numpy的expand_dims方法,在轴1的位置添加维度,让形状从(320,6)变成(320,1,6)(这里每个样本的时间步设为1,如果你有其他时间步逻辑可以调整这个值)。
代码:x_train = np.expand_dims(x_train, axis=1) - 修改模型的
input_shape参数为(1,6),对应时间步1、特征数6。 - 重新构建模型并训练。
修改后的完整代码
import numpy as np import keras def build_modelLSTMlite(input_shape): model = keras.Sequential() model.add(keras.layers.LSTM(64, input_shape=input_shape)) model.add(keras.layers.Dense(64, activation='relu')) model.add(keras.layers.Dropout(0.3)) model.add(keras.layers.Dense(10, activation='softmax')) return model # 给x_train增加时间步维度 x_train = np.expand_dims(x_train, axis=1) # 传入正确的input_shape model = build_modelLSTMlite(input_shape=(1,6)) optimiser = keras.optimizers.Adam(learning_rate=0.001) model.compile(optimizer=optimiser, loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.summary() history = model.fit(x_train, y_train, batch_size=32, epochs=100)
额外说明
如果你的数据原本有时间步逻辑(比如每N个连续样本作为一个时间序列),那需要重新调整x_train的形状,比如把320个样本分成若干个长度为N的序列,形状变成(样本组数, N, 6),同时input_shape设为(N,6)。但如果每个样本就是独立的时间步(比如单步预测),上面的修复就足够了。
内容的提问来源于stack exchange,提问作者poorna
相关产品推荐
相关产品推荐

