解決pytorch下出現(xiàn)multi-target not supported at的一種可能原因
在使用交叉熵?fù)p失函數(shù)的時候,target的形狀應(yīng)該是和label的形狀一致或者是只有batchsize這一個維度的。
如果target是這樣的【batchszie,1】就會出現(xiàn)上述的錯誤。
改一下試試,用squeeze()函數(shù)降低緯度,
如果不知道squeeze怎么用的,
可以參考這篇文章。pytorch下的unsqueeze和squeeze用法
這只是一種可能的原因。
補充:pytorch使用中遇到的問題
1. load模型參數(shù)文件時,提示torch.cuda.is_available() is False。
按照pytorch官方網(wǎng)頁又安裝了一次pytorch,而不是直接使用清華源,執(zhí)行pip install torch,暫時不知道為什么。
2. 使用CrossEntropyLoss時,要求第一個參數(shù)為網(wǎng)絡(luò)輸出值,F(xiàn)loatTensor類型,第二個參數(shù)為目標(biāo)值,LongTensor類型。否則
需要在數(shù)據(jù)讀取的迭代其中把target的類型轉(zhuǎn)換為int64位的:target = target.astype(np.int64),這樣,輸出的target類型為torch.cuda.LongTensor。(或者在使用前使用Tensor.type(torch.LongTensor)進(jìn)行轉(zhuǎn)換)。
3.
RuntimeError: multi-target not supported at /pytorch/torch/lib/THCUNN/generic/ClassNLLCriterion.cu loss += F.cross_entropy( scores, captions )
出錯原因:
scores, captions的維度與F.cross_entropy()函數(shù)要求的維度不匹配,
例如出錯的維度為scores=[batch, vocab_size], captions=[batch, 1]
解決:
loss += F.cross_entropy( scores, captions.squeeze() )
注,這個scores必須是N*C維,C指類別數(shù)。
4. pytorch訓(xùn)練過程中使用大量的CPU資源
當(dāng)我使用pycharm運行 (https://github.com/Joyce94/cnn-text-classification-pytorch ) pytorch程序的時候,在Linux服務(wù)器上會開啟多個進(jìn)程,占用服務(wù)器的大量的CPU,在windows10上運行此程序的時候,本機的CPU和內(nèi)存會被吃光,是因為在train.py中有大量的數(shù)據(jù)訓(xùn)練處理,會開啟多個進(jìn)程,占用大量的CPU和進(jìn)程。
本機window10

linux服務(wù)器開啟了多個進(jìn)程

Linux服務(wù)器占用大量CPU

在pytorch中提供了(http://pytorch.org/docs/master/multiprocessing.html)muliprocessing多進(jìn)程管理,其中有Pool進(jìn)程池、Process()等對進(jìn)程進(jìn)行管理,可能是我使用的方式不對,反正是沒有什么效果。
然而最簡單的也是最好的解決辦法 :
torch.set_num_threads(int thread) ,可以很好的解決windows問題,參考(http://pytorch.org/docs/master/torch.html#parallelism) 然而,在linux服務(wù)器上還是有一些問題的,export OMP_NUM_THREADS = 1 可以解決Linux問題。
經(jīng)驗證:export OMP_NUM_THREADS=1確實在pycaffe/pytorch中可以有效降低CPU使用率且提高程序運行速度,考慮可能是程序并不需要這么大的計算量,但是開了很多線程并行進(jìn)行相同的計算,最后還需要同步結(jié)果,浪費了大量的計算量。
5. 在pytorch框架下編譯模塊的時候遇到 in <module>
raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.
解決:pytorch版本與其他庫的版本不匹配。我當(dāng)時裝的是1.0.0,降低版本到0.4.0后問題解決。
6.pytorch設(shè)置GPU,os.environ['CUDA_VISIBLE_DEVICES']='X'要放在主程序的最前端,否則設(shè)置GPU可能無效。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
pytorch機器學(xué)習(xí)softmax回歸的簡潔實現(xiàn)
這篇文章主要介紹了為大家介紹了pytorch機器學(xué)習(xí)中softmax回歸的簡潔實現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
Python strip lstrip rstrip使用方法
Python中的strip用于去除字符串的首位字符,同理,lstrip用于去除左邊的字符,rstrip用于去除右邊的字符。這三個函數(shù)都可傳入一個參數(shù),指定要去除的首尾字符。2008-09-09
Python?pickle模塊實現(xiàn)Python對象持久化存儲
這篇文章主要介紹了Python?pickle模塊實現(xiàn)Python對象持久化存儲,pickle?是?python?語言的一個標(biāo)準(zhǔn)模塊,和python安裝時共同安裝好的一個模塊。下文基于pickle模塊展開實現(xiàn)Python對象持久化存儲的詳細(xì)內(nèi)容,需要的朋友可以參考一下2022-05-05
Python?Matplotlib?marker?標(biāo)記詳解
這篇文章主要介紹了Python?Matplotlib?marker?標(biāo)記詳解,Matplotlib,風(fēng)格類似?Matlab?的基于?Python?的圖表繪圖系統(tǒng),詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-07-07
python3實現(xiàn)短網(wǎng)址和數(shù)字相互轉(zhuǎn)換的方法
這篇文章主要介紹了python3實現(xiàn)短網(wǎng)址和數(shù)字相互轉(zhuǎn)換的方法,涉及Python操作字符串的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04
Django JWT Token RestfulAPI用戶認(rèn)證詳解
這篇文章主要介紹了Django JWT Token RestfulAPI用戶認(rèn)證詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
Python實現(xiàn)將藍(lán)底照片轉(zhuǎn)化為白底照片功能完整實例
這篇文章主要介紹了Python實現(xiàn)將藍(lán)底照片轉(zhuǎn)化為白底照片功能,結(jié)合完整實例形式分析了Python基于cv2庫進(jìn)行圖形轉(zhuǎn)換操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-12-12

