pytorch windows ForkingPickler(file, protocol).dump(obj) AttributeError: Can‘t pickle local object

问题背景:

在windows 复现代码的时候发现

ForkingPickler(file, protocol).dump(obj) AttributeError: Can't pickle local object 'RamSDataset.__init__.<locals>.<lambda>'


问题描述及问题成因:

很明显是由于 在Dataloader 里设置的 num_worker 不是0,但是我印象中之前在windows 下写代码的时候 也没碰见过这种问题


解决过程:

在查找时 发现 https://blog.csdn.net/ONE_SIX_MIX/article/details/130388252

不经意间指出问题:(引用)

其实是pickle 库只能储存一些简单类型。如果 dataset 中使用 lambda 函数对象,将会导致出现这样的错误 AttributeError: Can’t pickle local object


解决方案:

将 dataset 里使用的 lambda 方法 改写


结论及重点:

观察 报错

Can't pickle local object 'RamSDataset.__init__.<locals>.<lambda>

其实已经说了 lambda 的问题只是没意识到时它导致了 pickle的问题,进而影响 dataloader 的 num_worker 控制的 multiprocessing


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值