pytorch DataLoader num_workers 出现的问题

    最近在学pytorch,在使用数据分批训练时在导入数据是使用了 DataLoader 在参数 num_workers的设置上使程序出现运行没有任何响应的结果  ,看看代码

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教学视频,教学视频中没有报错)

程序就停止成这样了

pytorch DataLoader num_workers 出现的问题_第1张图片

上网查询没有得到有用的东西,因为程序没有报错,就是没有任何反应,(没有反应可能跟电脑或者编译器有关,我使用的是anconda spyder)于是决定自己找找

期初我采用在语句后面加 print('1')检测程序停在了什么地方,(其实这是一种笨方法,在这里可以采用断点调试)程序停在了 for step,(batch_x,batch_y) in enumerate(loader):

我以为是enumerate的问题,查资料发现这就是一个可返回列表元素和键值的函数,不存在问题

继续排查,把目光放在了loader,于是查询了DataLoader的参数

DataLoader的函数定义如下:

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: 样本抽样,后续会详细介绍
5.  num_workers:使用多进程加载的进程数,0代表不使用多进程
6.  collate_fn: 如何将多个样本数据拼接成一个batch,一般使用默认的拼接方式即可
7.  pin_memory:是否将数据保存在pin memory区,pin memory中的数据转到GPU会快一些

8.  drop_last:dataset中的数据个数可能不是batch_size的整数倍,drop_last为True会将多出来不足一个batch的数据丢弃

发现我所定义的几个参数只有num_workers嫌疑最大,于是将参数值改成了默认值 0,程序可以运行了,(一把老泪纵横)

看看进程是什么鬼 发现在这里好像没啥用(具体自己上网查查)

pytorch DataLoader num_workers 出现的问题_第2张图片

 

你可能感兴趣的:(pytorch DataLoader num_workers 出现的问题)