Keras函数式API报错:LSTM层收到2D输入而非要求的3D输入如何解决
错误根因
你出现形状不匹配报错的核心问题是没有实际修改训练数据的维度,仅计算了扩展后的形状值:你调用np.expand_dims(x_train, axis=1)后只取了shape属性赋值给变量,没有将扩展维度后的数组回赋值给x_train,最终送入model.fit的仍然是二维格式的x_train,不符合LSTM要求的三维输入规范。
LSTM的标准输入格式为(批量大小, 时间步长, 特征数),你的Input层定义shape=(1,62)是完全符合要求的(Keras会自动补充批量维度为None,对应实际运行时的批量大小),不需要修改Input层配置。
修复步骤
- 实际执行x_train的维度扩展操作,将二维数据转为三维
- 测试集x_test也要做相同的维度扩展、归一化处理,避免后续推理/验证时报错
修改后可运行的代码示例
import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler from tensorflow import keras samples = np.array(samples, dtype=np.float64) labels = np.array(labels, dtype=np.uint8) x_train, x_test, y_train, y_test = train_test_split(samples, labels, test_size=0.33, random_state=42) min_max = MinMaxScaler() # 归一化处理 x_train = min_max.fit_transform(x_train) x_test = min_max.transform(x_test) # 测试集用训练集的归一化参数做变换 # 实际将x_train扩展为三维,再取形状 x_train = np.expand_dims(x_train, axis=1) x_test = np.expand_dims(x_test, axis=1) # 测试集同步扩展维度 lstm_input_shape = x_train.shape inputs = keras.Input(shape=(lstm_input_shape[1], lstm_input_shape[2])) hidden = keras.layers.LSTM(lstm_input_shape[2], activation='tanh')(inputs) output = keras.layers.Dense(2)(hidden) model = keras.Model(inputs=inputs, outputs=output, name="financial_model") model.compile( loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True), optimizer=keras.optimizers.Adam(learning_rate=0.001), metrics=["accuracy"], ) model.summary() history = model.fit(x_train, y_train, batch_size=1, epochs=5, validation_split=0.2) # 后续测试集验证也可以直接运行 model.evaluate(x_test, y_test)
内容的提问来源于stack exchange,提问作者Fox
相关产品推荐
相关产品推荐

