Keras - 如何获取 GRU 单元状态?

Posted

技术标签:

【中文标题】Keras - 如何获取 GRU 单元状态?【英文标题】:Keras - How to get GRU cell state? 【发布时间】:2019-09-20 12:31:34 【问题描述】:

对于 LSTM,我们可以检索最后一个输出和最后一个单元状态,如下所示

outputs, state_h, state_c= LSTM(lstm_dim, return_sequences=True, return_state=True)(inputs)

其中 state_h 是最后一个输出序列; output[-1]=state_h 和 state_c 是LSTM 的最后一个 CELL STATE

但是对于 GRU,它没有这样的选项,而只给出与 state_h 等效的选项。如何从 Keras GRU 获取 state_c 的最后一个单元状态?

【问题讨论】:

【参考方案1】:

GRU 中没有内存,也就是说没有cell state

GRU,一般直接对隐藏状态进行操作得到输出值。在大多数情况下,GRULSTM 具有相同的性能,但计算量更少(参数数量更少)。

欢迎提问。

【讨论】:

让我再澄清一点。我正在研究 LSTM 和 GRU 单元的结构。对于 LSTM,ht 是时间 t 的输出,Ct 是细胞状态?而对于 GRU 只有 ht 所以你说没有单元状态并且它严格应用于 Keras?我一直认为单元状态意味着单元中的一些权重用于进行 LSTM 和 GRU 的计算。我的猜测是后者,这是我的想法,是错误的? 如果是这样,我怎样才能从 Keras LSTM 层获取细胞状态序列?是否需要对图层进行一些自定义修改? 当您使用return_sequence 时,它会返回每个单元格的输出以及隐藏状态,即使它已被滚动。当您附加 LSTM 或 GRU 的其他层时,这很有用,这可以从那些隐藏的信息中受益。更多内容可以参考link 您的任务不需要任何自定义层。请阅读 keras documentation。 对不起,您的回答不正确。 return_sequences 只返回 LSTM 序列的输出,而不是 LSTM 序列的单元状态。即使使用 return_state,它也只给出 LSTM 序列的最后一个单元状态。我想知道序列的每个细胞状态。我什至测试了示例代码,看看它们提供了什么。

以上是关于Keras - 如何获取 GRU 单元状态?的主要内容,如果未能解决你的问题,请参考以下文章

GRU 层中的计算是如何进行的

tf.keras.layers.GRU理解

如何在 Keras 中重置状态变量?

基于经过训练的 Keras 模型在纯 Numpy 中实现有状态 GRU

LSTM 和 GRU 门如何决定将哪个单词保留在内存中

如何在pytorch中获得双向2层GRU的最终隐藏状态