Encoder-Decoder LSTM编码器解码器连接方式及代码相关疑问
Encoder-Decoder LSTM 连接逻辑与疑问解答
针对你提出的Encoder-Decoder LSTM连接问题,结合给出的单特征、多对一架构代码,逐一解答如下:
给出的代码实现
model.add(LSTM(units, input_shape=(n_input, n_features),dropout=rdo, activation = keras.layers.LeakyReLU(alpha=0.2))) model.add(RepeatVector(1)) model.add(LSTM(units, activation = keras.layers.LeakyReLU(alpha=0.2), return_sequences=True, dropout=rdo)) model.add(TimeDistributed(Dense(100, activation = keras.layers.LeakyReLU(alpha=0.2)))) model.add(TimeDistributed(Dense(n_features)))
疑问解答
你的理解是正确的。当第一个LSTM层(编码器)未设置
return_state=True时,它仅输出最后一个时间步的隐藏状态;随后RepeatVector(1)会将这个隐藏状态复制1次,转换为形状为(1, units)的序列张量,作为解码器LSTM的输入序列(解码器处理这个长度为1的序列,每个时间步的输入就是该复制后的隐藏状态)。这种情况下,解码器LSTM的初始隐藏状态和细胞状态会默认采用全零初始化。这确实会丢失编码器的细胞状态信息:标准Encoder-Decoder架构中,编码器会将最后时间步的隐藏状态和细胞状态同时传递给解码器作为初始状态,让解码器能利用编码器捕获的完整时序记忆;而这里仅将编码器的隐藏状态作为输入传入解码器,未传递细胞状态,相当于丢弃了LSTM细胞状态中存储的长期时序信息,可能会削弱模型对复杂时序依赖的建模能力。
内容的提问来源于stack exchange,提问作者Travelling Salesman
相关产品推荐
相关产品推荐

