python - 使用双向包装器时,如何在 LSTM 层中同时获得最终隐藏状态和序列

标签 python deep-learning keras

我已按照 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 个张量:

  1. 整个隐藏状态序列,默认情况下它将是前向和后向状态的串联。
  2. 前向 LSTM 的最后隐藏状态 h
  3. 前向 LSTM 的最后一个单元状态 c
  4. 后向 LSTM 的最后隐藏状态 h
  5. 后向 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/

相关文章:

machine-learning - 为什么预训练的 ResNet18 比训练的验证精度更高?

python - 如何从softmax层中提取权重?

python - Keras - 如何使用 2 个独立的全连接层共享 CNN 的卷积部分

javascript - 如何使用 selenium python 从动态网站检索所有链接

python - Gmail 不接受电子邮件程序登录

python - Python 使用什么字节顺序写入文件?

python - 尽管对 keras 中的零填充小批量 LSTM 训练进行掩码支持,但零预测

machine-learning - 如何在 Keras 中为两个后端重复未知维度

python - 传递给 `fit` 的模型只能将 `training` 和 `call` 中的第一个参数作为位置参数,发现

python - 使用 core.Token 将字符串参数作为数字传递