1. 程式人生 > >除錯SSD-pytorch程式碼問題彙總

除錯SSD-pytorch程式碼問題彙總

程式碼連結:https://github.com/amdegroot/ssd.pytorch

1.執行demo-ssd.py,改動detection.py中49行:

if scores.numel() == 0:#scores.dim()

2. multibox_loss.py 中,97行

“loss_c[pos] = 0” 除錯過程中發現 loss_c的shape與pos的shape 不同,會出現不匹配錯誤,因此將此句改為以下:
loss_c[pos.view(-1,1)] = 0

將pos通過view(-1,1) 改為與loss_c相匹配的shape。

3.multibox_loss.py中 N=num_pos.data.sum()的dtype為torch.int64,而進行除法操作的 loss_l 與loss_c的dtype為torch.float32,執行時會出現 ‘torch.cuda.LongTensor but found type torch.cuda.FloatTensor for argument’類似錯誤,此時需要檢視引數型別,將N的型別改為torch.float32即可。 

N = num_pos.data.sum()
N=N.float()

4.train.py程式碼中,在迭代過程中,每次執行batch張圖片,通過images, targets = next(batch_iterator)

讀取圖片時,如果next()中沒有資料後會觸發Stoplteration異常,使用下面語句替換 images, targets = next(batch_iterator)將解決這種異常問題。

while True:
    try:
        # 獲得下一個值:
        images, targets = next(batch_iterator)

    except StopIteration:
        # 遇到StopIteration就退出迴圈
        break

5.RuntimeError: CUDNN_STATUS_INTERNAL_ERROR的解決辦法:

需要清除CUDA快取,使用sudo進行,但它屬於Linux命令,windows中需要進行以下操作:

(1).在任意目錄中新建文字檔案,命名為sudo.js

(2).用記事本開啟剛才新建的檔案,貼上下面程式碼

var command = WScript.Arguments.Item(0);
var argument = "";
for (var i = 0; i < WScript.Arguments.Count(); ++i){
    argument += WScript.Arguments.Item(i) + " ";
}

try{
    var shellapp = new ActiveXObject("Shell.Application");
    shellapp.ShellExecute(command, argument, null, "runas", 1);
}

catch(e){
    WScript.Echo("Something wrong: " + e.description + " By http://www.alexblair.org");
}

使用cmd開啟sudo.js檔案即可進行sudo操作。

(3).執行sudo rm -f ~/.nv/    (一定最後邊不要漏掉“/”,否則會提示“.nv”是目錄)