解决pytorch DataLoader num_workers出现的问题
最近在学pytorch,在使用数据分批训练时在导入数据是使用了DataLoader在参数num_workers的设置上使程序出现运行没有任何响应的结果,看看代码
importtorch#导入模块 importtorch.utils.dataasData 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 ) forepochinrange(3): forstep,(batch_x,batch_y)inenumerate(loader): print('epoch',epoch,'|step:',step,"|batch_x",batch_x.numpy(), '|batch_y:',batch_y.numpy())
(以上代码取莫烦python教学视频,教学视频中没有报错)
程序就停止成这样了
上网查询没有得到有用的东西,因为程序没有报错,就是没有任何反应,(没有反应可能跟电脑或者编译器有关,我使用的是ancondaspyder)于是决定自己找找
期初我采用在语句后面加print('1')检测程序停在了什么地方,(其实这是一种笨方法,在这里可以采用断点调试)程序停在了forstep,(batch_x,batch_y)inenumerate(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:batchsize
3.shuffle::是否将数据打乱
4.sampler:样本抽样,后续会详细介绍
5.num_workers:使用多进程加载的进程数,0代表不使用多进程
6.collate_fn:如何将多个样本数据拼接成一个batch,一般使用默认的拼接方式即可
7.pin_memory:是否将数据保存在pinmemory区,pinmemory中的数据转到GPU会快一些
8.drop_last:dataset中的数据个数可能不是batch_size的整数倍,drop_last为True会将多出来不足一个batch的数据丢弃
发现我所定义的几个参数只有num_workers嫌疑最大,于是将参数值改成了默认值0,程序可以运行了,(一把老泪纵横)
看看进程是什么鬼发现在这里好像没啥用(具体自己上网查查)
以上这篇解决pytorchDataLoadernum_workers出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。