You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:24:03