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()”

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值