- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章解决pytorch DataLoader num_workers出现的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近在学pytorch,在使用数据分批训练时在导入数据是使用了 DataLoader 在参数 num_workers的设置上使程序出现运行没有任何响应的结果 ,看看代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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的函数定义如下:
1
2
3
|
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出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/weixin_42236288/article/details/80893882 。
最后此篇关于解决pytorch DataLoader num_workers出现的问题的文章就讲到这里了,如果你想了解更多关于解决pytorch DataLoader num_workers出现的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这两个选项之间发生的并行化有区别吗?我假设 num_workers 只关心数据加载的并行化。但是一般来说,设置 torch.set_num_threads 是为了训练吗?试图了解这些选项之间的区别。谢
这里 x_dat 和 y_dat 只是很长的一维张量。 class FunctionDataset(Dataset): def __init__(self): x_dat, y
我是一名优秀的程序员,十分优秀!