pytorch:如何使用GRU模型的输出?

时间:2020-08-06 08:45:44

标签: pytorch

pytorch中的GRU模型输出两个对象:输出要素以及隐藏状态。我知道对于分类,一个使用输出功能,但是我不确定是哪个。具体而言,在解码器部分中使用GRU的典型解码器-编码器体系结构中,通常只会将最后一个(按时间,即t = N,其中N是输入序列的长度)传递给编码器。输出张量的哪一部分引用此时间最后输出?

GRU的创建方式如下(请注意,它是双向的):

self.gru = nn.GRU(
            700,
            700,
            bidirectional=True,
            batch_first=True,
        )

给定一些表示大小为150x700的文本的嵌入矢量,我像这样使用GRU(序列长度为150,嵌入尺寸为700):

gru_out, gru_hidden = self.gru(embedding)

gru_out的形状为150x1400,其中150还是序列长度,而1400是嵌入尺寸的两倍,这是因为GRU是双向的(根据pytorch的文档,hidden_​​size * num_directions)。

如果我只想访问按时间顺序显示的最后一个输出,是否需要像这样访问它?

tmp = gru_out.view(150, 2, 700)
last_out_first_direction = tmp[149, 0, :]
last_out_second_direction = tmp[149, 1, :]

虽然从技术上讲这是正确的,并且类似于发布的答案here,但它还要求实际输入序列的长度始终为150,而通常情况下,您还需要将较短的实际输入序列填充为以下内容:长度为150。但是,在GRU中,人们通常对最后一个实际的输入令牌感兴趣,因此它也可以位于位置<150。 访问实际的最后令牌或时间步(<= 150)而不是仅从技术上最后一步(总是= 150)的常见方法是什么?

旁边的问题:第二个方向的输出是否颠倒了(因为信息通过GRU传递的方向也比第一个方向颠倒了),所以我实际上应该访问last_out_second_direction = tmp[0, 1, :]而不是{{1 }}?

0 个答案:

没有答案