Pytorch dataloader在加載最后一個batch時卡死的解決
更新時間:2021年05月28日 10:15:47 作者:Wilber529
這篇文章主要介紹了Pytorch dataloader在加載最后一個batch時卡死的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
問題:
自己寫了個dataloader,為了部署方便,用OpenCV的接口進行數據讀取,而沒有用PIL,代碼大致如下:
def __getitem__(self, idx): sample = self.samples[idx] img = cv2.imread(sample[0]) img = cv2.resize(img, tuple(self.input_size)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # if not self.val and random.randint(1, 10) < 3: # img = self.img_aug(img) img = Image.fromarray(img) img = self.transforms(img) ...
結果在訓練過程中,在第1個epoch的最后一個batch時,程序卡死。
解決方案:
可能是因為OpenCV與Pytorch互鎖的問題,關閉OpenCV的多線程,問題解決。
cv2.setNumThreads(0) cv2.ocl.setUseOpenCL(False)
補充:pytorch 中一個batch的訓練過程
# 一般情況下 optimizer.zero_grad() # 梯度清零 preds = model(inputs) # inference,前向傳播求出預測值 loss = criterion(preds, targets) # 計算loss loss.backward() # 反向傳播求解梯度 optimizer.step() # 更新權重,更新網絡權重參數
此外,反向傳播前,如果不進行梯度清零,則可以實現梯度累加,從而一定程度上解決顯存受限的問題。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
一條命令解決mac版本python IDLE不能輸入中文問題
本文通過一條命令幫助大家解決mac版本python IDLE無法輸入中文問題,需要的朋友可以參考下2018-05-05Linux添加Python?path方法及修改環(huán)境變量的三種方法
這篇文章主要介紹了Linux添加Python?path方法及修改環(huán)境變量的三種方法,Linux 下設置環(huán)境變量有三種方法,一種用于當前終端,一種用于當前用戶,一種用于所有用戶,本文對每種方法給大家介紹的非常詳細,需要的朋友可以參考下2022-07-07