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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章