解决pytorch DataLoader num_workers出现的问题
作者:枫溪彤 发布时间:2022-10-22 06:34:38
最近在学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,程序可以运行了,(一把老泪纵横)
看看进程是什么鬼 发现在这里好像没啥用(具体自己上网查查)
来源:https://blog.csdn.net/weixin_42236288/article/details/80893882


猜你喜欢
- 简介该篇文章主要是介绍如何使用MyBatis对Mysql数据库进行单表操作(对于mybatis的下载以及配置文件的作用和具体信息,我在上一篇
- 研究了一晚上的成果。import serialimport win32com.clientimport matplotlib.pyplot
- 处理中文在进行写文件时,必须采用以下方式:tree.write(nxmlpath, "UTF-8")如果写成:tree.
- 本文实例讲述了Python实现查找二叉搜索树第k大的节点功能。分享给大家供大家参考,具体如下:题目描述给定一个二叉搜索树,找出其中第k大的节
- Python3中二叉树前序遍历的迭代解决方案A Binary Tree二叉树是分层数据结构,其中每个父节点最多有 2 个子节点。在今天的文章
- 首先了解一下需要的几个类所在的packagefrom torchvision import transforms, datasets as
- 如何实现自定义一个异常python内置了许多异常类,为编写代码划定红线,才使调试代码时能及时发现错误。那么我们编写一个模块也可以为使用此模块
- 如题,首先当然是要打开京东的手机页面因为要获取不同页面的所有手机图片,所以我们要跳转到不同页面观察页面地址的规律,这里观察第二页页面由观察可
- 简介Node2vec是一种用于图嵌入(Graph Embedding)的方法,可用于节点分类、社区发现和连接预测等任务。实现过程
- 因为项目开发中遇到需要向后台传本周的开始和结束时间,以及上一周的起止时间,就琢磨了半天,总算写出来一套,写篇文章是为了方便自己记忆,也是分享
- 任何一个行业里,当有一头近乎垄断的大象盘踞着的时候,生活在大象身后的蚂蚁们既是悲哀又是幸运的。悲哀的是市场已近乎被大象垄断留给他们的空间已经
- 介绍vue-router相当于vue内部跳转链接,将需要切换的页面在vue-router里注册,在项目里配置就能完成页面的切换,它不仅能完成
- 在Windows平台下,如果想运行爬虫的话,就需要在cmd中输入:scrapy crawl spider_name这时,爬虫就能启动,并在控
- 1. 采用工作区设置默认解释器的方式(推荐)下载完vscode,并安装python支持之后。使用vscode打开一个空文件夹。点击左侧的运行
- 一,用临时表作为数组 create function f_split(@c varchar(2000),@split varchar(2))
- 记录了mysql 8.0.12 的安装配置方法,分享给大家。一、安装1.从网上下载MySQL8.0.12版本,下载地址2. 下载完成后解压我
- javascript中声明函数的方法有两种:函数声明式和函数表达式.区别如下:1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式
- 计时器和延时器的概念 //--计时器 // 计时器ID号 setInterval(回调函数, 毫秒数); // 每隔指定毫秒数,调用一次回调
- 现在有越来越多的个人主页站长需要了解如何如何在windows系统下配置自己的php,cgi服务器,以方便本地调试cgi和php的程序。我们可
- 下边的函数,实现了象数组一样去处理字符串。 一,用临时表作为数组 create function f_split(@c varchar(20