最近在學pytorch,在使用數據分批訓練時在導入數據是使用了 DataLoader 在參數 num_workers的設置上使程序出現(xiàn)運行沒有任何響應的結果 ,看看代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import torch #導入模塊 import torch.utils.data as Data BATCH_SIZE = 8 #每一批的數據量 x = torch.linspace( 1 , 10 , 10 ) #定義X為 1 到 10 等距離大小的數 y = torch.linspace( 10 , 1 , 10 ) #轉換成torch能識別的Dataset torch_dataset = Data.TensorDataset( x,y) #將數據放入 torch_dataset loader = Data.DataLoader( dataset = torch_dataset, #將數據放入loader batch_size = BATCH_SIZE, #每個數據段大小為 BATCH_SIZE=5 shuffle = True , #是否打亂數據的排布 num_workers = 2 #每次提取數據多進進程為2 ) for epoch in range ( 3 ): for step,(batch_x,batch_y) in enumerate (loader): print ( 'epoch' ,epoch, '|step:' ,step, " | batch_x" ,batch_x.numpy(), '|batch_y:' ,batch_y.numpy()) |
(以上代碼取莫煩python教學視頻,教學視頻中沒有報錯)
程序就停止成這樣了
上網查詢沒有得到有用的東西,因為程序沒有報錯,就是沒有任何反應,(沒有反應可能跟電腦或者編譯器有關,我使用的是anconda spyder)于是決定自己找找
期初我采用在語句后面加 print('1')檢測程序停在了什么地方,(其實這是一種笨方法,在這里可以采用斷點調試)程序停在了 for step,(batch_x,batch_y) in enumerate(loader):
我以為是enumerate的問題,查資料發(fā)現(xiàn)這就是一個可返回列表元素和鍵值的函數,不存在問題
繼續(xù)排查,把目光放在了loader,于是查詢了DataLoader的參數
DataLoader的函數定義如下:
1
2
3
|
DataLoader(dataset, batch_size = 1 , shuffle = False , sampler = None , num_workers = 0 , collate_fn = default_collate, pin_memory = False , drop_last = False ) |
1. dataset:加載的數據集(Dataset對象)
2. batch_size:batch size
3. shuffle::是否將數據打亂
4. sampler: 樣本抽樣,后續(xù)會詳細介紹
5. num_workers:使用多進程加載的進程數,0代表不使用多進程
6. collate_fn: 如何將多個樣本數據拼接成一個batch,一般使用默認的拼接方式即可
7. pin_memory:是否將數據保存在pin memory區(qū),pin memory中的數據轉到GPU會快一些
8. drop_last:dataset中的數據個數可能不是batch_size的整數倍,drop_last為True會將多出來不足一個batch的數據丟棄
發(fā)現(xiàn)我所定義的幾個參數只有num_workers嫌疑最大,于是將參數值改成了默認值 0,程序可以運行了,(一把老淚縱橫)
看看進程是什么鬼 發(fā)現(xiàn)在這里好像沒啥用(具體自己上網查查)
以上這篇解決pytorch DataLoader num_workers出現(xiàn)的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/weixin_42236288/article/details/80893882