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.