【问题标题】:confusion about pytorch LSTM implementation关于 pytorch LSTM 实现的困惑
【发布时间】:2022-07-17 15:48:15
【问题描述】:

众所周知,pytorch 的 LSTM 实现是一个分层的双向 LSTM。

第一层的输入维度应该是 (L,N,H_in) 。如果我们使用双向 LSTM,那么第一层的输出是 (L, N, 2*H_hiddensize) official doc

我不知道这个输出是如何输入到第二个 LSTM 层的。 backforward层和forward层的输出会合并还是拼​​接?

我检查了其实现的源代码。 source code 但我没看懂。

layers = [_LSTMLayer(**self.input_size**, self.hidden_size,
                             self.bias, batch_first=False,
                             bidirectional=self.bidirectional, **factory_kwargs)]

for layer in range(1, num_layers):
    layers.append(_LSTMLayer(**self.hidden_size**, self.hidden_size,
                                     self.bias, batch_first=False,
                                     bidirectional=self.bidirectional,
                                     **factory_kwargs))
for idx, layer in enumerate(self.layers):
    x, hxcx[idx] = layer(x, hxcx[idx])

为什么第一层的输出 (shape: L,N,2H_hiddensize) 可以输入到期望 (shape: L,N, H_hiddensize) 而不是 (shape: L,N,2) 的第二层H_hiddensize)

【问题讨论】:

    标签: pytorch lstm bilstm


    【解决方案1】:

    我不知道这个输出是如何输入到第二个 LSTM 层的。 后向层和前向层的输出会合并吗 还是串联?

    是的,双向LSTM的输出会连接前向隐藏的最后一步和反向隐藏的第一步

    参考: Pytorch LSTM documentation

    对于双向 LSTM,h_n 不等价于 输出;前者包含最终的正向和反向隐藏 状态,而后者包含最终的前向隐藏状态和 初始反向隐藏状态。

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 2018-04-02
      • 2011-01-18
      • 2021-05-26
      • 2015-03-25
      • 2019-11-18
      • 2012-04-10
      • 2019-05-17
      • 2020-03-06
      相关资源
      最近更新 更多