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

Keras LSTM层中return_sequence与return_state参数的作用疑问

Keras LSTM层return_sequences与return_state参数解析

首先明确结论:你对这两个参数的理解存在部分偏差,具体规则和验证如下:

基础前提

Keras中LSTM层的默认输入维度为(batch_size, timesteps, input_dim),其中:

  • batch_size:单批次样本数
  • timesteps:输入序列的时间步长度
  • input_dim:单个时间步输入特征的维度
    LSTM层定义时设置的units参数为隐藏状态、细胞状态的特征维度。

单个参数作用说明

return_sequences

控制LSTM层返回的隐藏状态范围:

  • 取值为False(默认值):仅返回最后一个时间步的隐藏状态,输出维度为(batch_size, units)
  • 取值为True:返回所有时间步的隐藏状态序列,输出维度为(batch_size, timesteps, units)

典型使用场景:堆叠多层LSTM时,上层LSTM必须设置return_sequences=True,才能给下层LSTM输入符合要求的时序数据。

return_state

控制LSTM层是否额外返回最后一个时间步的状态值:

  • 取值为False(默认值):仅返回隐藏状态输出(输出格式受return_sequences控制)
  • 取值为True:共返回3个张量,按顺序分别为:
    1. 隐藏状态输出(格式受return_sequences控制)
    2. 最后一个时间步的隐藏状态,维度固定为(batch_size, units)
    3. 最后一个时间步的细胞状态,维度固定为(batch_size, units)

两个参数同时设为True的输出说明

此时返回的3个张量分别为:

  1. 所有时间步的隐藏状态序列,维度(batch_size, timesteps, units)
  2. 最后一个时间步的隐藏状态,维度(batch_size, units)
  3. 最后一个时间步的细胞状态,维度(batch_size, units)

你之前的理解偏差点在于:该场景下返回的细胞状态只有最后一个时间步的结果,并非所有时间步对应位置的细胞状态序列。
另外你后续的推演结论是正确的:标准LSTM结构中,只会将上一个时间步的隐藏状态、细胞状态传入下一个时间步做计算,不需要传入完整的状态序列,不会出现架构打乱或维度适配问题。

维度验证代码示例

from tensorflow.keras.layers import Input, LSTM
from tensorflow.keras.models import Model

# 输入:批次维度任意,时间步长10,单步特征维度32
inputs = Input(shape=(10, 32))
# LSTM层设置:隐藏单元64,同时打开两个参数
lstm_layer = LSTM(64, return_sequences=True, return_state=True)
outputs, hidden_state, cell_state = lstm_layer(inputs)

print(outputs.shape)      # 输出:(None, 10, 64)
print(hidden_state.shape) # 输出:(None, 64)
print(cell_state.shape)   # 输出:(None, 64)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:39:05