Pytorch训练SSD网络时遇到的问题

当我使用大神利用pytorch复现的SSD网络进行训练时,遇到如下问题:

1、loss突然变为NAN

问题分析及解决方案:由于我的显存只有4G,因此将默认的batch_size由32改为了2。在batch_size减小的情况下,应适当减小学习率,即可解决问题。比较合适的组合如下:

batch_size=32    lr=1e-3

batch_size=8    lr=1e-4

batch_size=2    lr=1e-5

2、Stop Iteration(自动跳出迭代)

#使用如下代码代替:images, targets = next(batch_iterator)
try:
    images, targets = next(batch_iterator)
except StopIteration:
    batch_iterator=iter(data_loader)
    images, targets = next(batch_iterator)

3、loss_c[pos] = 0,提示Pos与loss_c形状不匹配

#在loss_c[pos]=0前添加如下代码,改变loss_c形状
loss_c = loss_c.view(pos.size()[0],pos.size()[1])

4、在GPU下执行webcam demo

源码中live.py文件默认只能在cpu下执行,如果想要在gpu下执行,则需要修改如下几处代码:

    #1、新增代码:创建网络对象net后,将其转移到gpu上
        if args.cuda > 0:
             net.cuda()

    # 2、修改代码:将 cv2_demo(net.eval(), transform)改为如下代码
         with torch.no_grad():
             cv2_demo(net.eval(), transform)

    #3、新增代码:在函数predict里的x = Variable(x.unsqueeze(0))代码后新增如下代码,将输入转移到gpu上计算
        if args.cuda > 0:
            x = x.cuda()

    #4、ssd.py文件中detect函数的输入self.priors.type(type(x.data)) 改为如下代码
        self.priors.type_as(x)

参考:https://blog.csdn.net/dingkm666/article/details/88775428

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的路飞桑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值