運行pytorch代碼遇到的error解決辦法


1.no CUDA-capable device is detected

首先考慮的是cuda的驅動問題,查看gpu顯示是否正常,然后更新最新的cuda驅動;

第二個考慮的是cuda設備的默認參數是否修改,平常一塊顯卡的設置是0,多塊可能會修改此參數:

CUDA_VISIBLE_DEVICES="3"  ,把它修改為0即可解決。

2.out of gpu memory

調小batch_size。

換一個簡單的模型,例如從resnet101換成resnet50

根據任務不同,情況不同可以修改base_size和crop_size.

圖片格式從float換成int

優化程序,每一步都釋放掉多余的占用顯存的變量

3.因為模型結構下載出現問題,或者別的預加載文件出現問題

直接換網絡,或者用外網。

4.明顯的存在的文件,但是導入代碼出現錯誤,例如

from ..utils import get_upsampling_weight
兩點代表上上一級目錄,這里識別不出來,可以直接設定根目錄,然后把兩個點去掉.

5.Error: Expected more than 1 value per channel when training

,增大batchsize,因為在batch中計算平均值和方差時不能設置batchsize為1.
6.UserWarning: invalid index of a 0-dim tensor.

修改loss.data[0]為loss.item()

7.torch 未定義

重新輸入,讓ide重新識別

8.RuntimeError: invalid argument 0:

  • 你輸入的圖像數據的維度不完全是一樣的,比如是訓練的數據有100組,其中99組是256*256,但有一組是384*384,這樣會導致Pytorch的檢查程序報錯
  • 可以嘗試添加img = img.convert('RGB')到您__getitem__Dataset。(有時已經添加也無法改變)
  • 另外一個則是比較隱晦的batchsize的問題,Pytorch中檢查你訓練維度正確是按照每個batchsize的維度來檢查的,比如你有1000組數據(假設每組數據為三通道256px*256px的圖像),batchsize為4,那么每次訓練則提取(4,3,256,256)維度的張量來訓練,剛好250個epoch解決(250*4=1000)。但是如果你有999組數據,你繼續使用batchsize為4的話,這樣999和4並不能整除,你在訓練前249組時的張量維度都為(4,3,256,256)但是最后一個批次的維度為(3,3,256,256),Pytorch檢查到(4,3,256,256) != (3,3,256,256),維度不匹配,自然就會報錯了,這可以稱為一個小bug。

那么怎么解決,針對第一種,很簡單,整理一下你的數據集保證每個圖像的維度和通道數都一直即可。第二種來說,挑選一個可以被數據集個數整除的batchsize或者直接把batchsize設置為1即可。

9.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM