解决pytorch trainloader遇到的多进程问题
pytorch中尝试用多进程加载训练数据集,源码如下:
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=3)
结果报错:
RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module:
if __name__ == '__main__': freeze_support() ...
The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.
从报错信息可以看到,当前进程在运行可执行代码时,产生了一个新进程。这可能意味着您没有使用fork来启动子进程或者是未在主模块中正确使用。
后来经过查阅发现了原因,因为windows系统下默认用spawn方法部署多线程,如果代码没有受到__main__模块的保护,新进程都认为是要再次运行的代码,将尝试再次执行与父进程相同的代码,生成另一个进程,依此类推,直到程序崩溃。
解决方法很简单
把调用多进程的代码放到__main__模块下即可。
if __name__ == '__main__':
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=3)
补充:pytorch-Dataloader多进程使用出错
使用Dataloader进行多进程数据导入训练时,会因为多进程的问题而出错
dataloader = DataLoader(transformed_dataset, batch_size=4,shuffle=True, num_workers=4)
其中参数num_works=表示载入数据时使用的进程数,此时如果参数的值不为0而使用多进程时会出现报错
RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.
此时在数据的调用之前加上if __name__ == '__main__':即可解决问题
if __name__ == '__main__':#这个地方可以解决多线程的问题
for i_batch, sample_batched in enumerate(dataloader):
(资源库 www.zyku.net)
原文链接:https://blog.csdn.net/zhang123454lulu/article/details/83374860
栏 目:Python教程
下一篇:python 命令行传参方法总结
本文标题:解决pytorch trainloader遇到的多进程问题
本文地址:https://www.zyku.net/python/9631.html
您可能感兴趣的文章
- 02-08PyTorch梯度裁剪避免训练loss nan的操作
- 02-08我对PyTorch dataloader里的shuffle=True的理解
- 02-08浅谈pytorch中为什么要用 zero_grad() 将梯度清零
- 02-08pytorch DataLoader的num_workers参数与设置大小详解
- 02-08pytorch 带batch的tensor类型图像显示操作
- 02-08解决pytorch中的kl divergence计算问题
- 02-08pytorch 实现在测试的时候启用dropout
- 04-09使用pytorch实现线性回归
- 10-09黑鲨4s在哪里升降肩键
- 01-12动勤-动勤应用软件功能介绍
- 09-24腾讯会议在哪里开启长期会议号
- 09-27国家反诈中心短信预警开启步骤一览
- 09-19万年历禁止定点报时方法分享
- 02-10华为nova8隐私空间功能使用教程
- 09-13vivox70pro+蓝色款什么时候上市
- 12-15荣耀60Pro简易模式在哪开启
- 12-25云上建安-云上建安应用软件功能介绍
- 02-23DedeCMS修改问答分类页标题长度限制的
- 01-12花季视频制作-花季视频制作应用软件功
- 12-12小米平板5如何开启双击唤醒屏幕
最近更新
阅读排行
猜你喜欢
- 03-16opporeno6设置桌面插件操作方法
- 04-28vivox60pro显示电池百分比教程
- 10-13iOS15查看隐私报告方法介绍
- 01-15华为运动健康个性化内容推荐怎么关闭
- 02-17vivox60清除app角标的方法
- 11-21CSS中文字体写法整理
- 01-10苹果13如何导入旧手机联系人
- 01-08君莲书院-君莲书院应用软件功能介绍
- 03-20vivos12唤醒语音助手方法
- 11-11vivox60怎么屏蔽热点推送