解決pytorch trainloader遇到的多進程問題
pytorch中嘗試用多進程加載訓(xùn)練數(shù)據(jù)集,源碼如下:
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=3)
結(jié)果報錯:
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:if __name__ == '__main__':
freeze_support()
...The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
從報錯信息可以看到,當前進程在運行可執(zhí)行代碼時,產(chǎn)生了一個新進程。這可能意味著您沒有使用fork來啟動子進程或者是未在主模塊中正確使用。
后來經(jīng)過查閱發(fā)現(xiàn)了原因,因為windows系統(tǒng)下默認用spawn方法部署多線程,如果代碼沒有受到__main__模塊的保護,新進程都認為是要再次運行的代碼,將嘗試再次執(zhí)行與父進程相同的代碼,生成另一個進程,依此類推,直到程序崩潰。
解決方法很簡單
把調(diào)用多進程的代碼放到__main__模塊下即可。
if __name__ == '__main__':
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=3)
補充:pytorch-Dataloader多進程使用出錯
使用Dataloader進行多進程數(shù)據(jù)導(dǎo)入訓(xùn)練時,會因為多進程的問題而出錯
dataloader = DataLoader(transformed_dataset, batch_size=4,shuffle=True, num_workers=4)
其中參數(shù)num_works=表示載入數(shù)據(jù)時使用的進程數(shù),此時如果參數(shù)的值不為0而使用多進程時會出現(xiàn)報錯
RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.
此時在數(shù)據(jù)的調(diào)用之前加上if __name__ == '__main__':即可解決問題
if __name__ == '__main__':#這個地方可以解決多線程的問題
for i_batch, sample_batched in enumerate(dataloader):
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用python Pandas實現(xiàn)批量拆分Excel與合并Excel
今天帶大家學(xué)習(xí)利用python Pandas實現(xiàn)批量拆分Excel與合并Excel,文中有非常詳細的的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Python編程中time模塊的一些關(guān)鍵用法解析
這篇文章主要介紹了Python編程中time模塊的一些關(guān)鍵用法解析,像mktime和localtime以及gmtime這些常用方法都有講到,需要的朋友可以參考下2016-01-01
對Pytorch神經(jīng)網(wǎng)絡(luò)初始化kaiming分布詳解
今天小編就為大家分享一篇對Pytorch神經(jīng)網(wǎng)絡(luò)初始化kaiming分布詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
用Python計算三角函數(shù)之a(chǎn)cos()方法的使用
這篇文章主要介紹了用Python計算三角函數(shù)之a(chǎn)cos()方法的使用,是Python學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05
python+appium實現(xiàn)自動化測試的示例代碼
appium是一個開源的測試自動化框架,可以與原生的、混合的和移動的web應(yīng)用程序使用,本文主要介紹了python+appium實現(xiàn)自動化測試的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01

