Keras-如何获得gru细胞状态?

问题描述 投票:0回答:2

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

outputs, state_h, state_c= LSTM(lstm_dim, return_sequences=True, return_state=True)(inputs)
state_h是输出的最后一个序列;输出[-1] = state_h和state_c是lstm

的最后一个单元格。 但是使用Gru,它没有这样的选择,而只能给出等同于state_h。如何从keras gru获得state_c的最后一个单元状态?

没有内部内存,这意味着没有
keras lstm recurrent-neural-network keras-layer
2个回答
1
投票

cell state
,通常直接在隐藏状态下运行以获取输出值。就大多数目的而言,
GRU

具有与

GRU

的性能相同的性能,而计算较少(参数数量较少)。

Feel免费提出问题。
    
Agru层
does
具有内部隐藏状态,就像LSTM单元格一样。但是,LSTM的隐藏状态分为两个部分:长期状态(

LSTM

)和短期状态(

hidden_c

0
投票
hidden_h

),这就是为什么您没有得到hidden_h,但对于GRU层来说是完全正常的。 您可以使用以下方式获得GRU状态:

hidden_c
在GRU和LSTM中,每个时间步骤的输出均基于
outputs, state_h = GRU(gru_dim, return_sequences=True, return_state=True)(inputs)
。这就是为什么如果您查看最后一个时间步骤的输出,它们等于
hidden_h
。
pytorch用户的Extra详细信息

在Pytorch中,您可以通过将

hidden_h

设置为所需的层来创建一个使用
GRU

LSTM

模块的多层RNN。如果您想要双向RNN。
模块返回:

在每个时间步骤中,顶层的输出的输出。形状:

num_layer

IF
bidrectional=True
,最后一个维度的大小加倍,并且包含向前方向的值,然后是向后方向的值。您可以使用
[batch_size, sequence_length, hidden_size]
.

对于LSTM(而不是GRU),这是最后一个时间步骤(
    batch_first=True
  1. )的所有层的长期隐藏状态。在几乎所有情况下,我们都可以安全地忽略这一点。

    对于LSTM和Gru,所有层的隐藏状态在最后一个时间步骤(
    bidirectional=True
    )。形状:

    outputs.view(batch_size, sequence_length, 2, hidden_size)
    • 如果模块是双向的,则第一个维度的大小加倍,并且包含每一层的前向和后值。您可以使用
      hidden_c
      .
  2. 由于仅包含顶层输出,并且仅包含最后一个时间步骤的隐藏状态,我们有

    hidden_h
    (假设

    [num_layers, batch_size, hidden_dim]
  3. hidden_states.view(num_layers, 2, batch_size, hidden_dim)

    .

    IF
    outputs

    ,然后
      hidden_h
    • (向前方向:最后一个状态在最后一个时间步骤)和
      outputs[:, -1] == hidden_h[-1]
      (向后方向:最后一个状态在第一个时间步骤)。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.