Pytorch中Dataloader踩坑

  • 环境:
  • 问题背景:
  • 观察报错信息进行分析
  • 根据分析进行修改尝试
  • 总结

环境:

系统:windows10
Pytorch版本:1.5.1+cu101

问题背景:

直接上代码(来源莫烦Python):

import torch
import torch.utils.data as Dataprint(torch.__version__)
BATACH_SIZE = 5x = torch.linspace(1,10,10)         # [1,  2, 3, 4, 5, 6, 7, 8, 9, 10]
y = torch.linspace(10,1,10)         # [10 ,9, 8, 7, 6, 5, 4, 3, 2, 1 ]
torch_dataset = Data.TensorDataset(x, y)
loader = Data.DataLoader(dataset = torch_dataset,batch_size=BATACH_SIZE,shuffle=True,num_workers=2,
)# if __name__ == '__main__':
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())

报错信息:

RuntimeError: An attempt has been made to start a new process before thecurrent process has finished its bootstrapping phase.This probably means that you are not using fork to start yourchild processes and you have forgotten to use the proper idiomin the main module:if __name__ == '__main__':freeze_support()...The "freeze_support()" line can be omitted if the programis not going to be frozen to produce an executable.
Traceback (most recent call last):File "C:\Softwares\Proware\Deeplearn\Anaconda3\envs\YOLOV5\lib\site-packages\torch\utils\data\dataloader.py", line 761, in _try_get_datadata = self._data_queue.get(timeout=timeout)File "C:\Softwares\Proware\Deeplearn\Anaconda3\envs\YOLOV5\lib\multiprocessing\queues.py", line 105, in getraise Empty
_queue.EmptyDuring handling of the above exception, another exception occurred:Traceback (most recent call last):File "D:/WorkSpace/Codes/Pycharm/2020/NPyTorch/Minibatchtraing.py", line 24, in <module>for step, (batch_x, batch_y) in enumerate(loader):File "C:\Softwares\Proware\Deeplearn\Anaconda3\envs\YOLOV5\lib\site-packages\torch\utils\data\dataloader.py", line 345, in __next__data = self._next_data()File "C:\Softwares\Proware\Deeplearn\Anaconda3\envs\YOLOV5\lib\site-packages\torch\utils\data\dataloader.py", line 841, in _next_dataidx, data = self._get_data()File "C:\Softwares\Proware\Deeplearn\Anaconda3\envs\YOLOV5\lib\site-packages\torch\utils\data\dataloader.py", line 808, in _get_datasuccess, data = self._try_get_data()File "C:\Softwares\Proware\Deeplearn\Anaconda3\envs\YOLOV5\lib\site-packages\torch\utils\data\dataloader.py", line 774, in _try_get_dataraise RuntimeError('DataLoader worker (pid(s) {}) exited unexpectedly'.format(pids_str))
RuntimeError: DataLoader worker (pid(s) 8528, 8488) exited unexpectedly

观察报错信息进行分析

定位到错误位置为:for step, (batch_x, batch_y) in enumerate(loader):
观察错误信息发现两点:
1:DataLoader worker中的pis(s)存在异常,因此推断为num_workers=2,设置有问题。
2:错误提示:

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()...

可以看到两个和线程(进程?)有关的两个函数:freeze_support()fork
因此基本断定是由于线程设置而引发的错误。
并且错误信息有提示:习惯用法为:freeze_support()函数紧跟在main后。

根据分析进行修改尝试

1,修改进程数:将DataLoader中的num_workers=2,改成num_workers=0,仅执行主进程。运行成功!!!
2,使用多进程习惯用法:再for循环前加上main函数,成功运行!!!

总结

根据询问对线程(进程)熟悉的同学和后续查阅资料得出问题出现的原因:

程序在运行时启用了多线程,而多线程的使用用到了freeze_support()函数。
freeze_support()函数在linux和类unix系统上可直接运行,在windows系统中需要跟在main后边。

Pytorch中Dataloader踩坑:RuntimeError: DataLoader worker (pid(s) 6700, 10620) exited unexpectedly相关推荐

  1. 让你在 API 设计中少踩坑的实战分享

    本文来自作者 奔跑吧架构师 在 GitChat 上分享 「让你在 API 设计中少踩坑的实战分享」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 在项目开发中,实际的编码只占用了整个项目不 ...

  2. Pytorch 中retain_graph的坑

    Pytorch 中retain_graph的坑 在查看SRGAN源码时有如下损失函数,其中设置了retain_graph=True,其作用就是 在更新D网络时的loss反向传播过程中使用了retain ...

  3. pytorch转onnx踩坑日记

    在深度学习模型部署时,从pytorch转换onnx的过程中,踩了一些坑.本文总结了这些踩坑记录,希望可以帮助其他人. 首先,简单说明一下pytorch转onnx的意义.在pytorch训练出一个深度学 ...

  4. 对称加密算法在C#中的踩坑日常

    前言 有幸接触了一下传说中的对称加密算法3DES 感觉这些加密算法与我的工作是想去甚远的,一般没什么机会接触这些东西 今次了解了一下3DES这个对称算法 原理算不上明白,算是踩了C#中的一些坑吧 C# ...

  5. 微信退款 java工具类,微信支付中退款踩坑记录

    首先附上微信支付的开发者文档 其实这里所说的踩坑记录,无非就是微信在开发者文档上的写不太明确,也没有比较官方的demo,在此列出一个可行的demo,供大家下载使用. 主要问题就是在这几步解密上 微信的 ...

  6. Pytorch踩坑: RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0.

    报错信息: RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 186 a ...

  7. 在C++平台上部署PyTorch模型流程+踩坑实录

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文主要讲解如何将pytorch的模型部署到c++平台上的模 ...

  8. 经验 | 在C++平台上部署PyTorch模型流程+踩坑实录

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨火星少女@知乎 来源丨https://zhuanlan ...

  9. 记录某项目中的踩坑与解决(持续更新)

    前言 最近参加了某个比赛, 我所选的赛题就是个类似知乎这样的安卓app,由于着手近一个月了,踩了不少坑,之前没怎么记录,估计事后也会忘记干净. 因此特开一帖,在此记录下相关的坑. 记录 Recycle ...

最新文章

  1. matlab 读取文件的精度,读取数据文件精度问题!真心求大神赐教 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  2. Eclipse改字体字号
  3. MATLAB solve函数计算得到lambertw函数,用vpa转换即可
  4. Linux编程 文件操作,linux高级编程(文件操作)
  5. Python学习:day20正则表达式
  6. centos6.5 x86_64安装rsyslog + loganalyzer
  7. 个人h5第三方支付接口_个人免签支付接口系统搭建源码多种方式
  8. wifi精灵android版,WiFi精灵安卓版
  9. xvidcore.dll not found视频播放问题
  10. Twitter群推王的推特自动发帖功能是如何实现的
  11. 12.qgis二次开发qt中实现图层树右键图层更改图层颜色,以及图层标注。
  12. ue4 点击某一物体触发事件_UE4引擎——姜小白修炼记(三)
  13. Visio 2016 和 SharePoint Designer 2013 来创建工作流并将其发布到 SharePoint 2016 网站而无需任何代码
  14. RAID 1 的优点缺点和应用场景
  15. 激活神器!KMSpico v10.2.0 正式版本
  16. SIO_KEEPALIVE_VALS 用户异常掉线检测
  17. pl/sql 本机不安装oracle服务端连接服务器
  18. mysql随机生成数据并插入_python生成随机数据插入mysql
  19. 【GPS】经纬度DMS格式与DDD格式在线互换
  20. 东北大学计算机网络实验报告最新,东北大学计算机网络实验报告.doc

热门文章

  1. 33岁程序员成都年薪45万,想跳槽去杭州阿里,看到工资乐了
  2. 终于肝了30篇高并发-学习贵在坚持
  3. mybatis:Error parsing SQL Mapper Configuration
  4. “预知能力的超人” 细数威胁情报那些事儿
  5. 云南计算机一级c类基础知识,计算机一级c类是什么
  6. 杂文笔记(三):CSI的线性相位去噪及其python实现
  7. 申请亚洲交友中心广告联盟教程
  8. 49 款开源办公软件
  9. 006 金融工具库funcat安装教程及异常处理
  10. 开核有望?AMD Ryzen 5处理器确认8核阉割