1. 程式人生 > 其它 >【轉載】 在PyTorch訓練一個epoch時,模型不能接著訓練,Dataloader卡死——在pytorch中儘量不要使用opencv而是使用PIL

【轉載】 在PyTorch訓練一個epoch時,模型不能接著訓練,Dataloader卡死——在pytorch中儘量不要使用opencv而是使用PIL

 

 


版權宣告:本文為CSDN博主「時光碎了天」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/u013289254/article/details/103429257

 

 

==============================================

   

 

筆者在訓練模型的時候,突然偶遇這個問題,即訓練一個epoch時,模型不能接著訓練,只能通過Ctrl+C強制性暫停,見下圖:

 

 

 

 

 

    Ctrl+C之後呈現的資訊表明,這個bug是和多執行緒有關係。

    經過筆者實驗,目前有三種可靠的解決方式

    1).Dataloader裡面不用cv2.imread進行讀取圖片,用cv2.imread還會帶來一系列的不方便,比如不能結合torchvision進行資料增強,所以最好用PIL 裡面的Image.open來讀圖片

    2).將DataLoader 裡面的參變數num_workers設定為0,但會導致資料的讀取很慢,拖慢整個模型的訓練

    3).如果用了cv2.imread,也懶得改了,那就加兩條語句,來關閉Opencv的多執行緒:cv2.setNumThreads(0)和cv2.ocl.setUseOpenCL(False)。加了這兩條語句之後,並不影響模型的訓練速度,根據筆者觀察,速度相反還變快了,真神奇呀。

    綜上所述:如果遇到此問題,建議選擇方法1和方法3來解決這個問題,因為不影響模型訓練速度。

 

 

 

————————————————