TransUNet训练报错:AttributeError: Can‘t pickle local object ‘trainer_synapse.<locals>.worker_init_fn’
不能将局部对象worker_init_fn进行pickle序列化。然而worker_init_fn就是一个局部函数,不能被序列化。②将num_workers设置为0,使用单进程运行程序。①将worker_init_fn定义为全局函数。时,PyTorch 需要将某些对象通过。序列化,以便将其从主进程传递到工作进程。
·
报错原因:
不能将局部对象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)
更多推荐


所有评论(0)