解决pytorch DataLoader num_workers出现的问题


Posted in Python onJanuary 14, 2020

最近在学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出现的问题

上网查询没有得到有用的东西,因为程序没有报错,就是没有任何反应,(没有反应可能跟电脑或者编译器有关,我使用的是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出现的问题

以上这篇解决pytorch DataLoader num_workers出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解python脚本自动生成需要文件实例代码
Feb 04 Python
Python中序列的修改、散列与切片详解
Aug 27 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
关于Python-faker的函数效果一览
Nov 28 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
通过python检测字符串的字母
Feb 18 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
浅谈python数据类型及其操作
May 25 Python
基于Python实现nc批量转tif格式
Aug 14 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 #Python
python重要函数eval多种用法解析
Jan 14 #Python
关于ResNeXt网络的pytorch实现
Jan 14 #Python
Python属性和内建属性实例解析
Jan 14 #Python
Python程序控制语句用法实例分析
Jan 14 #Python
dpn网络的pytorch实现方式
Jan 14 #Python
Django之form组件自动校验数据实现
Jan 14 #Python
You might like
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
PHP SOCKET编程详解
2015/05/22 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
模仿百度三维地图的js数据分享
2011/05/12 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
Javascript动画的实现原理浅析
2015/03/02 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
python调用cmd复制文件代码分享
2013/12/27 Python
Python3基础之基本数据类型概述
2014/08/13 Python
Python实现感知机(PLA)算法
2017/12/20 Python
详解Python自建logging模块
2018/01/29 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
总经理助理岗位职责
2013/11/08 职场文书
一夜的工作教学反思
2014/02/08 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
七年级语文教学反思
2016/03/03 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Django Paginator分页器的使用示例
2021/06/23 Python
springboot读取resources下文件的方式详解
2022/06/21 Java/Android