对于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的最后一个单元状态?
没有内部内存,这意味着没有
cell state
,通常直接在隐藏状态下运行以获取输出值。就大多数目的而言,
GRU
具有与GRU
的性能相同的性能,而计算较少(参数数量较少)。 Feel免费提出问题。Agru层
does具有内部隐藏状态,就像LSTM单元格一样。但是,LSTM的隐藏状态分为两个部分:长期状态(
LSTM
)和短期状态(
hidden_c
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
对于LSTM和Gru,所有层的隐藏状态在最后一个时间步骤(
bidirectional=True
)。形状:outputs.view(batch_size, sequence_length, 2, hidden_size)
hidden_c
.由于仅包含顶层输出,并且仅包含最后一个时间步骤的隐藏状态,我们有
hidden_h
(假设[num_layers, batch_size, hidden_dim]
hidden_states.view(num_layers, 2, batch_size, hidden_dim)
.
。
IF
outputs
,然后hidden_h
outputs[:, -1] == hidden_h[-1]
(向后方向:最后一个状态在第一个时间步骤)。