关于pytorch LSTM实现的困惑

lsmepo6l  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(150)

众所周知,pytorch的LSTM实现是一个分层的双向LSTM。
假设第一层的输入维度为(L,N,H_in)。如果我们使用双向LSTM,那么第一层的输出是(L,N,2*H_hiddensize)official doc
我不知道这个输出是如何输入到第二个LSTM层的。前向层和后向层的输出是否会合并或连接?
我检查了它的实现的源代码。源代码,我看不懂。

  1. layers = [_LSTMLayer(**self.input_size**, self.hidden_size,
  2. self.bias, batch_first=False,
  3. bidirectional=self.bidirectional, **factory_kwargs)]
  4. for layer in range(1, num_layers):
  5. layers.append(_LSTMLayer(**self.hidden_size**, self.hidden_size,
  6. self.bias, batch_first=False,
  7. bidirectional=self.bidirectional,
  8. **factory_kwargs))

个字符
为什么第一层的输出(形状:L,N,2H_hiddensize)可以被馈送到第二层中,其期望(形状:L,N,H_hiddensize)但不是(shape:L,N,2H_隐藏大小)

zy1mlcev

zy1mlcev1#

我不知道这个输出是如何输入到第二个LSTM层的。前向层和后向层的输出是否会合并或连接?
是的,双向LSTM的输出将连接正向隐藏的最后一步和反向隐藏的第一步
参考:Pytorch LSTM documentation
对于双向LSTM,h_n不等价于输出的最后一个元素;前者包含最终前向和反向隐藏状态,而后者包含最终前向隐藏状态和初始反向隐藏状态。

kse8i1jr

kse8i1jr2#

双向LSTM可以被视为两个独立的LSTM,除了共享输入Tensor之外,它们彼此没有任何关系。前向LSTM在前向方向上消耗输入,而反向LSTM在(时间维度的)反向方向上消耗输入。

相关问题