You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch中DataLoader引发多进程RuntimeError的修复咨询

问题修复:PyTorch DataLoader多进程启动RuntimeError

你的推测没错,这个错误确实由DataLoader的num_workers=4参数引发。Windows系统下Python多进程默认采用spawn启动方式,子进程会重新执行主模块的全部代码,如果没有用if __name__ == '__main__':包裹核心执行逻辑,子进程会递归创建DataLoader并启动新进程,最终触发这个错误。

修复要点

  • 将所有实际执行操作的代码(创建数据集、DataLoader、读取数据、显示图像等)放入if __name__ == '__main__':代码块,确保只有主进程执行这些逻辑
  • freeze_support()放在该代码块的最开头(Windows下不打包成可执行文件时可省略,但加上更兼容)

修复后的完整代码

from multiprocessing import freeze_support
import torch
import torch.nn as nn
import torchvision
import torch.optim as optim
from torch.optim import lr_scheduler
import numpy as np
from torchvision import datasets,models, transforms
import time
import os
import copy
import matplotlib.pyplot as plt
# import torch.backends.cudnn as cudnn
# cudnn.benchmark = True
plt.ion()   # interactive mode

def imshow(inp,title=None):
    inp =inp.numpy().transpose((1,2,0))
    mean = np.array([0.485, 0.456, 0.406])
    std = np.array([0.229, 0.224, 0.225])
    inp = std * inp + mean
    inp = np.clip(inp, 0, 1)
    plt.imshow(inp)
    if title is not None:
        plt.title(title)
    plt.pause(0.001)  # pause a bit so that plots are updated

if __name__ == '__main__':
    freeze_support()
    path ='C:/Users/User/PycharmProjects/AI_Project/hymenoptera_data'
    data_transforms ={
        'train':transforms.Compose([
            transforms.RandomResizedCrop(224),
            transforms.RandomHorizontalFlip(),
            transforms.ToTensor(),
            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ]),
        'val':transforms.Compose([
            transforms.Resize(256),
            transforms.CenterCrop(224),
            transforms.ToTensor(),
            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ]),
    }
    image_datasets ={x:datasets.ImageFolder(os.path.join(path,x),data_transforms[x])
                        for x in ['train','val']}
    dataloaders ={x: torch.utils.data.DataLoader(image_datasets[x],batch_size=4,shuffle=True,num_workers=4)
                            for x in ['train','val']}
    class_names = image_datasets['train'].classes
    device =torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    
    inputs,classes =next((iter(dataloaders['train'])))
    out =torchvision.utils.make_grid(inputs)
    imshow(out,title=[class_names[x]for x in classes])

内容的提问来源于stack exchange,提问作者user466534

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:57:25