解决pytorch DataLoader num_workers出现的问题

 更新时间:2020年01月14日 09:21:53   作者:枫溪彤  
今天小编就为大家分享一篇解决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教学视频,教学视频中没有报错)

程序就停止成这样了

上网查询没有得到有用的东西,因为程序没有报错,就是没有任何反应,(没有反应可能跟电脑或者编译器有关,我使用的是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出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python爬虫爬取淘宝商品信息(selenum+phontomjs)

    python爬虫爬取淘宝商品信息(selenum+phontomjs)

    这篇文章主要为大家详细介绍了python爬虫爬取淘宝商品信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python爬虫之超级鹰验证码应用

    Python爬虫之超级鹰验证码应用

    众所周知python是一个很强大的语言,它拥有众多的库,今天我尝试了使用超级鹰第三方平台进行验证码的开发,需要的朋友可以参考下
    2022-08-08
  • 深入理解Python中装饰器的用法

    深入理解Python中装饰器的用法

    装饰器的使用是Python的高级技巧之一,通过Decorator装饰器能够带来函数式编程中所需的很多特性,这里我们就来跟随文章一同深入理解Python中装饰器的用法,需要的朋友可以参考下
    2016-06-06
  • python中torch.load中的map_location参数使用

    python中torch.load中的map_location参数使用

    在PyTorch中,torch.load()函数是用于加载保存模型或张量数据的重要工具,map_location参数为我们提供了极大的灵活性,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 解决pytorch trainloader遇到的多进程问题

    解决pytorch trainloader遇到的多进程问题

    这篇文章主要介绍了解决pytorch trainloader遇到的多进程问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python统计分析模块statistics用法示例

    Python统计分析模块statistics用法示例

    这篇文章主要介绍了Python统计分析模块statistics用法,结合实例形式分析了Python统计分析模块statistics计算平均数、中位数、出现次数、标准差等相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • Django实现文件分享系统的完整代码

    Django实现文件分享系统的完整代码

    这篇文章主要介绍了Django实现文件分享系统,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Python logging日志库空间不足问题解决

    Python logging日志库空间不足问题解决

    这篇文章主要介绍了Python logging日志库空间不足问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • python实现去除下载电影和电视剧文件名中的多余字符的方法

    python实现去除下载电影和电视剧文件名中的多余字符的方法

    这篇文章主要介绍了python实现去除下载电影和电视剧文件名中的多余字符的方法,可以批量修改视频文件名称,非常具有实用价值,需要的朋友可以参考下
    2014-09-09
  • Python wxPython库消息对话框MessageDialog用法示例

    Python wxPython库消息对话框MessageDialog用法示例

    这篇文章主要介绍了Python wxPython库消息对话框MessageDialog用法,结合实例形式简单分析了wxPython库的基本事件与相关使用技巧,需要的朋友可以参考下
    2018-09-09

最新评论