TransUNet训练报错:AttributeError: Can‘t pickle local object ‘trainer_synapse.<locals>.worker_init_fn’

报错原因:

不能将局部对象worker_init_fn进行pickle序列化

当你使用 多进程 时,PyTorch 需要将某些对象通过 pickle 序列化,以便将其从主进程传递到工作进程。

然而worker_init_fn就是一个局部函数,不能被序列化

错误代码:

def create_dataloader():
    def worker_init_fn(worker_id):
        # 你的初始化代码
        pass

    dataloader = DataLoader(dataset, num_workers=4, worker_init_fn=worker_init_fn)

正确代码:

def worker_init_fn(worker_id):
    # 你的初始化代码
    pass

dataloader = DataLoader(dataset, num_workers=4, worker_init_fn=worker_init_fn)

解决方法:

①将worker_init_fn定义为全局函数

②将num_workers设置为0,使用单进程运行程序

dataloader = DataLoader(dataset, num_workers=0, worker_init_fn=worker_init_fn)

参考:报错: AttributeError: Can‘t pickle local object ‘trainer_synapse.<locals>.worker_init_fn‘_attributeerror: can't pickle local object 'train.<-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值