(Pythorch 0.4.0)
如何对压缩序列(特别是在GPU上的LSTM中)应用手动释放层?直接传递压缩序列(来自lstm层)不起作用,因为dropout层不知道如何处理它,并且返回一些非压缩序列。传递压缩序列的数据似乎应该可以工作,但是会导致代码示例下面显示的属性错误。在
def __init__ (self, ....):
super(Model1, self).__init__()
....
self.drop = torch.nn.Dropout(p=0.5, inplace=False)
def forward(self, inputs, lengths):
pack1 = nn.utils.rnn.pack_padded_sequence(inputs, lengths, batch_first=True)
out1, self.hidden1 = self.lstm1(pack1, (self.hidden1[0].detach(), self.hidden1[1].detach()))
out1.data = self.drop(out1.data)
这将导致:
^{pr2}$反常的是,我可以使这是一个就地操作(再次,直接对数据,而不是完整的压缩序列),并且它在技术上在CPU上工作(即,它运行),但在GPU上发出警告,说明就地操作正在修改所需的梯度。这让我对CPU版本是否正常工作没有信心(是吗?是不是漏了个警告?这不是我第一次看到Pythorch默默地在做一些它应该发出警告的事情)而且在任何情况下GPU的支持都是至关重要的
所以:
您可以使用
pad_packed_sequence
:相关问题 更多 >
编程相关推荐