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个张量,按顺序分别为:- 隐藏状态输出(格式受
return_sequences控制) - 最后一个时间步的隐藏状态,维度固定为
(batch_size, units) - 最后一个时间步的细胞状态,维度固定为
(batch_size, units)
- 隐藏状态输出(格式受
两个参数同时设为True的输出说明
此时返回的3个张量分别为:
- 所有时间步的隐藏状态序列,维度
(batch_size, timesteps, units) - 最后一个时间步的隐藏状态,维度
(batch_size, units) - 最后一个时间步的细胞状态,维度
(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
相关产品推荐
相关产品推荐

