设置return_sequence与return_state后,双向LSTM的5个输出分别是什么状态?
return_sequence=True 和 return_state=True 的输出顺序解析 当你在Keras/TensorFlow中用Bidirectional包装LSTM,且同时开启return_sequences=True和return_state=True时,输出列表的5个元素对应顺序如下:
索引0:合并后的序列输出
这是双向LSTM对每个时间步处理后的结果,按照你设置的merge_mode='ave',它是前向LSTM和后向LSTM对应时间步输出的平均值。形状(1, 3, 3)对应(batch_size, timesteps, units),其中units=3是你定义的LSTM单元数。索引1:前向LSTM的最后时刻隐藏状态(h)
前向LSTM处理完所有时间步后输出的最终隐藏状态,形状(1, 3)对应(batch_size, units)。索引2:前向LSTM的最后时刻细胞状态(c)
前向LSTM的最终细胞状态,这是LSTM内部用于记忆的核心状态,形状同样是(1, 3)。索引3:后向LSTM的最后时刻隐藏状态(h)
后向LSTM是从原序列的最后一个时间步反向处理到第一个时间步,这里的“最后时刻”指的是它处理序列的终点(即原序列的第一个时间步)的隐藏状态,形状(1, 3)。索引4:后向LSTM的最后时刻细胞状态(c)
后向LSTM的最终细胞状态,形状(1, 3)。
逻辑依据
Keras中Bidirectional的状态输出遵循先前向、后后向的固定顺序:每个方向的LSTM在return_state=True时会输出[隐藏状态, 细胞状态],再加上最前面的合并序列输出,最终就形成了5个元素的列表:[合并序列输出, 前向h, 前向c, 后向h, 后向c]
你可以通过单独测试前向/后向LSTM的输出,对比状态值来验证这个顺序。
内容的提问来源于stack exchange,提问作者tikendraw

