Pytorch 在训练NLP相关模型中的一些BUG

1、RuntimeError: Expected `len(lengths)` to be equal to batch_size, but got 9 (batch_size=18)

 这个问题,有很多人讨论。主要是涉及到使用

nn.DataParallel 利用多GPU训练RNN模型会碰到这个问题,
主要是因为输入RNN的之前数据为 b,c,h;
但是输入的时候会利用permute(1, 0)变成c,b,h;
这个时候DataParallel会把数据变成c//2,b,h;
此时问题就出现了,torch.nn.utils.rnn.pack_padded_sequence(embedded, input_lengths)这个函数中embeded的size和input_lengths的size大小不一样了,input_lengths=b//2;
因此需要吧permute(1, 0)这个操作换到RNN模块也就是Net函数里面去就好了。

2、UserWarning: RNN module weights are not part of single contiguous chunk of memory. This means they need to be compacted at every call, possibly greatly increasing memory usage. To compact weights again call flatten_parameters().

这个问题,的原因我还没有搞清楚,但是解决办法如下:

找到你网络的class

在def forward(self):这个函数中中,找到  output,_=self.rnn/gru/lstm(...),在这个前面加上一句“self.rnn.flatten_parameters()”

你可能感兴趣的:(机器学习,深度学习,pytorch,自然语言处理)