在pytorch中堆叠LSTM输出

时间:2019-02-18 14:41:19

标签: python deep-learning lstm pytorch

我正在阅读一些有关使用lstm网络进行情感分析的教程。 下面的代码说,它堆叠了lstm输出。我不知道它是如何工作的。

lstm_out = lstm_out.contiguous().view(-1, self.hidden_dim)

1 个答案:

答案 0 :(得分:0)

它的确堆积了输出,kHarshit的评论在这里误导了!

为直观起见,让我们回顾一下教程中前一行的输出(2019年5月1日访问):

lstm_out, hidden = self.lstm(embeds, hidden)

根据the documentation,其输出维度为[sequence_length, batch_size, hidden_size*2]。在这里,两倍的输入长度来自双向LSTM。因此,最后一维的前半部分将始终是前向输出,然后是后向输出(我不确定该方向,但是在我看来,它已经朝着正确的方向)。

然后,您要关注的实际行:

我们在这里忽略了.contiguous()的细节,但是您可以在this excellent answer on Stackoverflow中进行阅读。总而言之,它基本上可以确保您的torch.Tensor在内存中对齐正确。
 最后,.view()允许您以特定方式重塑结果张量。在这里,我们的目标是具有两个维度的形状(由.view()的输入参数的数量定义。具体来说,第二个维度的大小应为hidden_dim-1对于第一个维度,仅意味着我们将重新分配矢量维度,而不必关心确切的维度,而只是满足另一个维度的要求。
因此,如果您有一个长度为40的矢量,并且想要将其重塑为(-1, 10)的2D张量,那么生成的张量将具有(4, 10)的形状。

正如我们之前说过的,向量的前半部分(长度hidden_dim)是前向输出,后半部分是后半部分,然后将结果分成张量{{1} }将产生张量(-1, hidden_dim),其中第一行包含正向输出,“堆叠”在第二行的顶部,等于反向层的输出。

视觉示例:

(2, hidden_dim)