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

如何让LSTM模型predict(x_test)输出二维数组?

解决LSTM模型predict输出三维数组的问题

问题根源

你的LSTM模型中所有LSTM层都设置了return_sequences=True,这会让每个LSTM层输出包含时间步维度的三维张量(形状为(样本数, 时间步, 特征数))。后续的Dense层默认对最后一维(特征数)做运算,会保留时间步维度,最终导致预测输出为三维数组。

解决方案

将最后一个LSTM层的return_sequences=True改为return_sequences=False,让该层输出仅包含样本和特征维度的二维张量,后续Dense层处理后即可得到二维的预测结果(形状为(103, 1))。

修改后的代码

# model create
model = Sequential()

# 第一个LSTM保留return_sequences=True,为下一层LSTM传递序列信息
model.add(LSTM(7, return_sequences=True, input_shape=(x_train.shape[1], 1))) 
# 最后一个LSTM关闭return_sequences,丢弃时间步维度
model.add(LSTM(10, return_sequences=False))
model.add(Dense(25, activation='relu'))
model.add(Dense(90, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(1))

# Compile the model
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy','mae'])

# Predict
prediction = model.predict(x_test)
print(prediction.shape)  # 输出应为(103, 1)

备选方案(不推荐)

如果必须保留LSTM的序列输出再接Dense层,可以在最后一个Dense前添加Flatten()层展平时间步和特征维度,但这种方式会丢失时序上下文关联,仅适用于特殊场景:

model = Sequential()
model.add(LSTM(7, return_sequences=True, input_shape=(x_train.shape[1], 1))) 
model.add(LSTM(10, return_sequences=True))
model.add(Flatten())  # 展平为(样本数, 7*10)
model.add(Dense(25, activation='relu'))
model.add(Dense(90, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(1))

内容的提问来源于stack exchange,提问作者seongmin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:37:57