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

多特征多输出LSTM时间序列预测输出维度不符如何调整

问题原因

LSTM层的return_sequences参数设为True时,会返回所有时间步的隐藏状态输出,输出维度会保留时间步长维度。你当前三层LSTM都开启了return_sequences=True,到最后的全连接层时输入维度为(样本数, 30, 50),全连接层会对每个时间步单独做映射,最终输出就会多出30的时间维度,和需求不符。

调整方案

你可以任选以下两种方案修改:

方案1:关闭最后一层LSTM的return_sequences

这是多对一时间序列预测的标准写法,仅让最后一层LSTM返回最后一个时间步的隐藏状态,直接去掉时间维度:

model = Sequential()
model.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
# 最后一层LSTM不设置return_sequences,默认值为False
model.add(LSTM(units = 50))
model.add(Dropout(0.2))
model.add(Dense(units = 4))

修改后输出维度为(样本数, 4),完全匹配你的预期。

方案2:新增时间维度聚合层

如果你需要保留所有时间步的输出做特征融合,可以在最后一层LSTM之后新增全局池化层,聚合30个时间步的特征后再接全连接层:

from tensorflow.keras.layers import GlobalAveragePooling1D

model = Sequential()
model.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
# 全局平均池化层聚合所有时间步的特征
model.add(GlobalAveragePooling1D())
model.add(Dense(units = 4))

这种方案适合多时间步均包含有效预测信息的场景,你可以根据实际测试精度选择更适配的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:03