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

the*_*ass 3 python neural-network deep-learning lstm pytorch

文档说

h_n形状的(num_layers*num_directions,分批,hidden_​​size):张量含有用于隐藏状态T = seq_len

现在,批处理hidden_​​size维度几乎是不言自明的.不过,第一个维度仍然是一个谜.

我假设,所有层的所有"最后一个单元格"的隐藏状态都包含在此输出中.但是,例如,"最上层"中"最后一个单元格"的隐藏状态是什么?h_n[-1]h_n[0]

输出是否受batch_first选项影响?

pat*_*_ai 6

在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对隐藏状态形状没有影响.