报错内容:An attempt has been made to start a new process before the current process has finished

该报错一般发生在Windows系统中使用多进程。比如在Pycharm中执行如下代码:

import torch
import torch.utils.data as Data
import numpy as np
from sklearn.datasets import load_irisiris_x, irisy = load_iris(return_X_y=True)
print("iris_x.dtype:", iris_x.dtype)
print("irisy:", irisy.dtype)## 训练集X转化为张量,训练集y转化为张量
train_xt = torch.from_numpy(iris_x.astype(np.float32))
train_yt = torch.from_numpy(irisy.astype(np.int64))
print("train_xt.dtype:", train_xt.dtype)
print("train_yt.dtype:", train_yt.dtype)## 将训练集转化为张量后,使用TensorDataset将X和Y整理到一起
train_data = Data.TensorDataset(train_xt, train_yt)
## 定义一个数据加载器,将训练数据集进行批量处理
train_loader = Data.DataLoader(dataset=train_data,  ## 使用的数据集batch_size=10,  # 批处理样本大小shuffle=True,  # 每次迭代前打乱数据num_workers=2,  # 【注意:这里使用2个进程】
)##  检查训练数据集的一个batch的样本的维度是否正确
for step, (b_x, b_y) in enumerate(train_loader):if step > 0:break
## 输出训练图像的尺寸和标签的尺寸,和数据类型
print("b_x.shape:", b_x.shape)
print("b_y.shape:", b_y.shape)
print("b_x.dtype:", b_x.dtype)
print("b_y.dtype:", b_y.dtype)## ——————————正确结果如下——————————
# iris_x.dtype: float64
# irisy: int32
# train_xt.dtype: torch.float32
# train_yt.dtype: torch.int64
# b_x.shape: torch.Size([10, 4])
# b_y.shape: torch.Size([10])
# b_x.dtype: torch.float32
# b_y.dtype: torch.int64

则会报如下的错。(在同样环境下的Jupyter Notebook中运行不会报错,目前不知道为何。。。)

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.

关于这里的freeze_support(),讲解可见:

讲解python中的 freeze_support()_欢迎关注,共同进步!-CSDN博客

其他例子见自己电脑 Pytorch\SYL_YBG\Test 路径下:

2_5_2_图像数据预处理.py

2_5_1_高维数组预处理.py

解决方法一:

把设置多进程的语句去掉,该例子中即把下面这行注释掉、删掉或者num_workers设为0。该语句表示调用 1+num_workers 个进程。Linux系统,该参数正常,不需担心。

num_workers=2,  # 【注意:这里使用2个进程】

解决方法二:

将当前位于脚本顶层的所有代码放在一个函数中,然后在【if __name__ == '__main__':】语句下调用。

import torch
import torch.utils.data as Data
import numpy as np
from sklearn.datasets import load_irisdef Func():iris_x, irisy = load_iris(return_X_y=True)print("iris_x.dtype:", iris_x.dtype)print("irisy:", irisy.dtype)## 训练集X转化为张量,训练集y转化为张量train_xt = torch.from_numpy(iris_x.astype(np.float32))train_yt = torch.from_numpy(irisy.astype(np.int64))print("train_xt.dtype:", train_xt.dtype)print("train_yt.dtype:", train_yt.dtype)## 将训练集转化为张量后,使用TensorDataset将X和Y整理到一起train_data = Data.TensorDataset(train_xt, train_yt)## 定义一个数据加载器,将训练数据集进行批量处理train_loader = Data.DataLoader(dataset=train_data,  ## 使用的数据集batch_size=10,  # 批处理样本大小shuffle=True,  # 每次迭代前打乱数据num_workers=2,  # 【注意:这里使用2个进程】)##  检查训练数据集的一个batch的样本的维度是否正确for step, (b_x, b_y) in enumerate(train_loader):if step > 0:break## 输出训练图像的尺寸和标签的尺寸,和数据类型print("b_x.shape:", b_x.shape)print("b_y.shape:", b_y.shape)print("b_x.dtype:", b_x.dtype)print("b_y.dtype:", b_y.dtype)if __name__ == '__main__': # 把上面所有内容都写到一个函数里,在该语句下调用函数,则只执行1遍!Func()
## ——————————Pycharm中运行结果如下——————————
iris_x.dtype: float64
irisy: int32
train_xt.dtype: torch.float32
train_yt.dtype: torch.int64
b_x.shape: torch.Size([10, 4])
b_y.shape: torch.Size([10])
b_x.dtype: torch.float32
b_y.dtype: torch.int64

——————————————

【注意】:如果只 把调用多进程的代码部分,移到【if __name__ == '__main__':下。

if __name__ == '__main__':##  检查训练数据集的一个batch的样本的维度是否正确for step, (b_x, b_y) in enumerate(train_loader):if step > 0:break## 输出训练图像的尺寸和标签的尺寸,和数据类型print("b_x.shape:", b_x.shape)print("b_y.shape:", b_y.shape)print("b_x.dtype:", b_x.dtype)print("b_y.dtype:", b_y.dtype)

在Pycharm中,会把【for step, (b_x, b_y) in enumerate(train_loader):】这行代码之前的部分执行3遍

## ——————————Pycharm中运行结果如下——————————
iris_x.dtype: float64
irisy: int32
train_xt.dtype: torch.float32
train_yt.dtype: torch.int64iris_x.dtype: float64
irisy: int32
train_xt.dtype: torch.float32
train_yt.dtype: torch.int64iris_x.dtype: float64
irisy: int32
train_xt.dtype: torch.float32
train_yt.dtype: torch.int64b_x.shape: torch.Size([10, 4])
b_y.shape: torch.Size([10])
b_x.dtype: torch.float32
b_y.dtype: torch.int64

Python Dataloader 多进程报错 num_workers参数设置相关推荐

  1. python安装报错类型_解决Python安装cryptography报错问题

    解决Python安装cryptography报错问题 错误一: gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wst ...

  2. 神奇的python(五)之python强制退出报错(异常)解决方法

    简介:python程序在执行时,有时候由于某些模块冲突或者是定时器冲突,会出现很多奇怪的错误,为此我们需要让python程序在退出时免受这些问题的干扰. (1) 常用的信号类型: SIGINT 终止进 ...

  3. python连接数据库mysql失败_解决python连接mysql报错问题

    解决python连接mysql报错问题 最近跑python脚本时遇到一个问题,当sql语句中有中文时,执行python脚本报以下错误: Traceback (most recent call last ...

  4. python decode ignore_python编解码,decode参数设置:ignore

    最近做一个小工具,把wireshark的报文进行解析,拿到请求.因为原始数据为16进制内容,例如"06e50284012e687474703a2f2f74656d707572692e6f7. ...

  5. python运行启动报错解决方法_解决python运行启动报错问题

    解决python运行启动报错问题 问题一: python启动报错api-ms-win-crt-process-l1-1-0.dll丢失 解决: 下载api-ms-win-crt-process-l1- ...

  6. python导入turtle报错,Python turtle

    python flask 全局变量需要加锁吗 python flask 全局变量需要加锁吗 搜索资料 我来答 分享 微信扫一扫 新浪微博 QQ空间 举报 浏览35 次 本地图片 图片链接 代码 提交 ...

  7. 【bug解决】Python运行显示报错--没有为项目配置Python解释器

    项目场景: 基于Python API 操作MongoDB,在python里面新建一个项目时,使用python连接数据库,打算运行的时候发现漏掉了一个低端错误,忘记配置了...啊啊啊!记录一下. 报错显 ...

  8. 已解决(Python爬虫requests报错)requests.exceptions.ProxyError: HTTPSConnectionPool

    成功解决(Python爬虫requests报错):requests.exceptions.ProxyError: HTTPSConnectionPool 文章目录 报错信息 报错翻译 报错原因 解决方 ...

  9. python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call

    python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call ...

最新文章

  1. CentOS7的node.js安装
  2. qt widget 窗口拉伸_QTDesigner的QVBoxLayout自动随窗口拉伸
  3. Linux 文件大小 文件夹大小 磁盘大小
  4. MFC实现获取鼠标位置的小程序
  5. MySQL带ALL关键字的子查询
  6. WIndows10系统解决“选择电源按钮的功能”中没有休眠选项
  7. clion的project区的字体以及自动排版的快捷键修改
  8. ubuntu linux root,Ubuntu 中的 root 用户:你应该知道的重要事情 | Linux 中国
  9. mapreduce文本排序_MapReduce:通过数据密集型文本处理
  10. Android 图片识别、图像识别
  11. 人事管理工作难开展?这几个人力资源管理软件用了没
  12. python画航线图_pyecharts绘制geo地图
  13. Glide使用心得——加载图片出现浅绿色背景问题和Glide加载完成的监听设置
  14. BMZCTF-MISC(一) WriteUp
  15. 【原创】《矩阵的史诗级玩法》连载十七:用矩阵研究二次贝塞尔曲线和抛物线的关系(上)
  16. 我被List中remove()方法的陷阱,坑惨了!
  17. App Store 审核必备
  18. 安装glib2.6x
  19. 华为路由交换学习篇-路由
  20. probuilder_使用ProBuilder自定义快照原型资产

热门文章

  1. Python 自动识别图片文字—OCR实战教程
  2. ubuntu系统切换高性能模式
  3. linux可用直播软件,免费直播软件OBS Studio下载 支持Windows/Mac和Linux
  4. exchange邮箱一直提示密码错误,密码是正确的,求大佬解答
  5. (linux-x86-ARM)麒麟V10安装DBeaver21.3通用的数据库管理工具和 SQL 客户端
  6. 判断用户flash是否安装了flash以及flash的版本
  7. 教你在线网页批量免费拆分PDF
  8. 傻妞对接TG/监控变量国内国外机视频教程 6.16
  9. 动态内存的申请和非动态内存的申请_公安交管新举措咋解读?非营运七座车6年免检,70岁可申请驾照...
  10. 批量实现json_to_dataset将json文件转换为训练所需的dataset