我已按照 https://machinelearningmastery.com/return-sequences-and-return-states-for-lstms-in-keras/ 中的步骤进行操作 但是当涉及到双向 lstm 时,我尝试了这个
lstm, state_h, state_c = Bidirectional(LSTM(128, return_sequences=True, return_state= True))(input)
但它不会起作用。
在使用双向包装器时,是否有一些方法可以在 LSTM 层中同时获得最终隐藏状态和序列
最佳答案
调用 Bidirectional(LSTM(128, return_sequences=True, return_state=True))(input)
返回 5 个张量:
- 整个隐藏状态序列,默认情况下它将是前向和后向状态的串联。
- 前向 LSTM 的最后隐藏状态
h
- 前向 LSTM 的最后一个单元状态
c
- 后向 LSTM 的最后隐藏状态
h
- 后向 LSTM 的最后一个单元状态
c
您发布的行会引发错误,因为您只想将返回值解压缩为三个变量(lstm、state_h、state_c
)。
要更正它,只需将返回值解包为 5 个变量即可。如果要合并状态,可以使用 Concatenate
层连接前向和后向状态。
lstm, forward_h, forward_c, backward_h, backward_c = Bidirectional(LSTM(128, return_sequences=True, return_state=True))(input)
state_h = Concatenate()([forward_h, backward_h])
state_c = Concatenate()([forward_c, backward_c])
关于python - 使用双向包装器时,如何在 LSTM 层中同时获得最终隐藏状态和序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49313650/