众所周知,pytorch的LSTM实现是一个分层的双向LSTM。
假设第一层的输入维度为(L,N,H_in)。如果我们使用双向LSTM,那么第一层的输出是(L,N,2*H_hiddensize)official doc
我不知道这个输出是如何输入到第二个LSTM层的。前向层和后向层的输出是否会合并或连接?
我检查了它的实现的源代码。源代码,我看不懂。
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))
个字符
为什么第一层的输出(形状:L,N,2H_hiddensize)可以被馈送到第二层中,其期望(形状:L,N,H_hiddensize)但不是(shape:L,N,2H_隐藏大小)
2条答案
按热度按时间zy1mlcev1#
我不知道这个输出是如何输入到第二个LSTM层的。前向层和后向层的输出是否会合并或连接?
是的,双向LSTM的输出将连接正向隐藏的最后一步和反向隐藏的第一步
参考:Pytorch LSTM documentation
对于双向LSTM,h_n不等价于输出的最后一个元素;前者包含最终前向和反向隐藏状态,而后者包含最终前向隐藏状态和初始反向隐藏状态。
kse8i1jr2#
双向LSTM可以被视为两个独立的LSTM,除了共享输入Tensor之外,它们彼此没有任何关系。前向LSTM在前向方向上消耗输入,而反向LSTM在(时间维度的)反向方向上消耗输入。