首页 文章

PyTorch中RNN(nn.LSTM,nn.GRU等)的输出h_n是如何构造的?

提问于
浏览
2

文档说

h_n of shape(num_layers * num_directions,batch,hidden_size):包含t = seq_len隐藏状态的张量

现在, batchhidden_size 维度几乎是不言自明的 . 不过,第一个维度仍然是一个谜 .

我假设所有层的所有"last cells"的隐藏状态都包含在此输出中 . 但那么"uppermost layer"中"last cell"的隐藏状态的索引是什么? h_n[-1]h_n[0]

输出是否受 batch_first 选项的影响?

1 回答

  • 5

    在pytorch中实现LSTM和GRU自动包括堆叠LSTM和GRU层的可能性 .

    你给这个关键字参数 nn.LSTM(num_layers=num_layers) . num_layers 是您拥有的堆叠LSTM(或GRU)的数量 . 默认值为1,它为您提供基本LSTM .

    num_directions 是1或2.对于普通LSTM和GRU,它是1,对于双向RNN,它是2 .

    因此,在您的情况下,您可能有一个简单的LSTM或GRU,因此 num_layers * num_directions 的值将为1 .

    h_n[0] 是最底层(接收输入的层)的隐藏状态,以及最顶层(输出网络输出的层)的 h_n[-1] .

    batch_first 将批次维度放在时间维度之前(默认为批次维度之前的时间维度),因为隐藏状态没有时间维度, batch_first 对隐藏状态形状没有影响 .

相关问题