AttributeError: Can't pickle local object 'BaseDataset.img_transformer.locals.lambda'
目录:
1. 问题:
2. 最终解决方法:
3. 解决问题的过程:
1)另外定义一个函数放在transforms.Lambda()括号里面,没有用。
2)import dill as pickle,没有用。
3)在命令后添加 --workers 0,没有用。
4)有人说是windows下pickling、multiprocessing的问题。
5)找出项目里含有workers的文件,把workers的值改为0,解决问题。
1. 问题:
File "E:\ganimation_replicate-master\data\data_loader.py", line 46, in __iter__
for i, data in enumerate(self.dataloader):
File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
AttributeError: Can't pickle local object 'BaseDataset.img_transformer.<locals>.<lambda>'
File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\spawn.py", line 115, in _main
self = reduction.pickle.load(from_parent)
EOFError: Ran out of input
Traceback (most recent call last):File "main.py", line 16, in <module>solver.run_solver()File "E:\ganimation_replicate-master\solvers.py", line 38, in run_solverself.test_networks(self.opt)File "E:\ganimation_replicate-master\solvers.py", line 106, in test_networksself.test_ops()File "E:\ganimation_replicate-master\solvers.py", line 113, in test_opsfor batch_idx, batch in enumerate(self.test_dataset):File "E:\ganimation_replicate-master\data\data_loader.py", line 46, in __iter__for i, data in enumerate(self.dataloader):File "E:\Anaconda3\envs\pytorch36\lib\site-packages\torch\utils\data\dataloader.py", line 451, in __iter__return _DataLoaderIter(self)File "E:\Anaconda3\envs\pytorch36\lib\site-packages\torch\utils\data\dataloader.py", line 239, in __init__w.start()File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\process.py", line 105, in startself._popen = self._Popen(self)File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\context.py", line 223, in _Popenreturn _default_context.get_context().Process._Popen(process_obj)File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\context.py", line 322, in _Popenreturn Popen(process_obj)File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__reduction.dump(process_obj, to_child)File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\reduction.py", line 60, in dumpForkingPickler(file, protocol).dump(obj)
AttributeError: Can't pickle local object 'BaseDataset.img_transformer.<locals>.<lambda>'(pytorch36) E:\ganimation_replicate-master>Traceback (most recent call last):File "<string>", line 1, in <module>File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\spawn.py", line 105, in spawn_mainexitcode = _main(fd)File "E:\Anaconda3\envs\pytorch36\lib\multiprocessing\spawn.py", line 115, in _mainself = reduction.pickle.load(from_parent)
2. 最终解决方法:
https://github.com/matterport/Mask_RCNN/issues/93 直到我看到了这篇博客。我就开始搜索我项目里的所有.py代码文件,一个文件一个文件的Ctrl+F搜索,看代码里面是否含有workers、mutilprocessing这两个关键字。最终,我在我项目的data_loader.py文件里搜索到了workers,把workers的值改为0,如下图所示,然后,我的错误就解决了!!!!!!
3. 解决问题的过程:
1)另外定义一个函数放在transforms.Lambda()括号里面,没有用。
https://github.com/donydchen/ganimation_replicate/issues/4 与我有一模一样的问题,作者提到了一个相似问题的解决链接https://discuss.pytorch.org/t/cant-pickle-local-object-dataloader-init-locals-lambda/31857
链接里提到一个解决方法,如下图所示:
我的原代码如下所示,也含有与Lambda相关的代码transforms.Lambda(lambda image: image)。
def img_transformer(self):transform_list = []if self.opt.resize_or_crop == 'resize_and_crop':transform_list.append(transforms.Resize([self.opt.load_size, self.opt.load_size], Image.BICUBIC))transform_list.append(transforms.RandomCrop(self.opt.final_size))elif self.opt.resize_or_crop == 'crop':transform_list.append(transforms.RandomCrop(self.opt.final_size))elif self.opt.resize_or_crop == 'none':transform_list.append(transforms.Lambda(lambda image: image))else:raise ValueError("--resize_or_crop %s is not a valid option." % self.opt.resize_or_crop)
所以,我改了自己的代码,改成transforms.Lambda(tmp_func),里面是一个自己定义的函数,如下所示:
def img_transformer(self):transform_list = []def tmp_func(image):return imageif self.opt.resize_or_crop == 'resize_and_crop':transform_list.append(transforms.Resize([self.opt.load_size, self.opt.load_size], Image.BICUBIC))transform_list.append(transforms.RandomCrop(self.opt.final_size))elif self.opt.resize_or_crop == 'crop':transform_list.append(transforms.RandomCrop(self.opt.final_size))elif self.opt.resize_or_crop == 'none':transform_list.append(transforms.Lambda(tmp_func))else:raise ValueError("--resize_or_crop %s is not a valid option." % self.opt.resize_or_crop)
结果,并没有用。依旧报错。
2)import dill as pickle,没有用。
https://github.com/chenchongthu/DeepCoNN/issues/3 AttributeError: Can't pickle local object 'numerize.<locals>.<lambda>' #3, 里面提到使用dill解决import dill as pickle。 给了一个链接https://stackoverflow.com/questions/25348532/can-python-pickle-lambda-functions,里面提到用dill解决的方法,和另外定义一个函数放在transforms.Lambda()括号里面,对我都没有用。
3)在命令后添加 --workers 0,没有用。
https://github.com/fizyr/keras-retinanet/issues/967 里提到添加 --workers 0
https://github.com/fizyr/keras-retinanet/issues/857 里提到 solve this by turning off multiprocessing. You can do this by providing the "--workers=0" parameter or by changing it directly in the train.py file in the line "parser.add_argument('--workers',
help='Number of multiprocessing workers. To disable multiprocessing, set workers to 0',type=int, default=0)"
https://blog.csdn.net/qq_20373723/article/details/85258535 里提到torch.utils.data.DataLoader函数里面有个参数num_workers表示进程个数,在windows下改为0就可以了
https://discuss.pytorch.org/t/pytorch-windows-eoferror-ran-out-of-input-when-num-workers-0/25918
4)有人说是windows下pickling、multiprocessing的问题。
https://github.com/thstkdgus35/EDSR-PyTorch/issues/105
https://github.com/yahoo/TensorFlowOnSpark/issues/198
https://github.com/yahoo/TensorFlowOnSpark/issues/36
5)找出项目里含有workers的文件,把workers的值改为0,解决问题。
https://github.com/matterport/Mask_RCNN/issues/93 直到我看到了这篇博客。我就开始搜索我项目里的所有.py代码文件,一个文件一个文件的Ctrl+F搜索,看代码里面是否含有workers、mutilprocessing这两个关键字。最终,我在我项目的data_loader.py文件里搜索到了workers,把workers的值改为0,然后,我的错误就解决了!!!!!!
AttributeError: Can't pickle local object 'BaseDataset.img_transformer.locals.lambda'相关推荐
- python 多进程multiprocessing 队列queue报错:AttributeError: Can't pickle local object
今天,test-191204-单个摄像头调用multiprocessing线程队列queue识别时,报错: D:\20191031_tensorflow_yolov3\python\python.ex ...
- dill:解决python的“AttributeError: Can‘t pickle local object”及无法pickle lambda函数的问题
dill:解决python的"AttributeError: Can't pickle local object"及无法pickle lambda函数的问题 参考文章: (1)di ...
- 【Python】dill:解决python的“AttributeError: Can‘t pickle local object”及无法pickle lambda函数的问题
[Python]dill:解决python的"AttributeError: Can't pickle local object"及无法pickle lambda函数的问题 pyt ...
- Can‘t pickle local object ‘get_transforms.<locals>.process‘
Can't pickle local object 'get_transforms.<locals>.process' 网上的答案: AttributeError: Can't pickl ...
- Can't pickle local object 'CDLL.__init__.locals._FuncPtr'
Can't pickle local object 'CDLL.__init__.<locals>._FuncPtr' 动态库代码: cv_dll=CDLL("E:\git_pr ...
- 使用pytorch时,遇到Can‘t pickle local object ‘xxx.<locals>.<lamba>‘的问题,注释有关部分有EOFError: Ran out of input问题
如图,出现报错Can't pickle local object 'xxx..' 直接按照报错信息查网上,有许多可能的解答,有 pickle有限制,无法解析我模型文件中的lambda表达式 pickl ...
- PYTORCH保存模型时报错AttributeError: Can‘t pickle local object ‘Stage.__init__.<locals>.<lambda>‘
解决方法: 点开报错的代码位置,将代码里面的import pickle改成import dill as pickle
- AttributeError: Can‘t pickle local object ‘GeneratorEnqueuer.start.<locals>.data_generator_task‘
在win10上运行代码出现标题所示情况,最终通过修改两个地方内容完成代码的运行 1.将use_multiprocessing=True修改为use_multiprocessing=False 2.将 ...
- TypeError: cannot pickle ‘module‘ object
创建python对象时报错: TypeError: cannot pickle 'module' object 原因: 很大可能是类成员错误的使用了第三方包(别名)等,具体排查方法可参考: impor ...
- PyTorch:模型save和load
-柚子皮- 神经网络训练后我们需要将模型进行保存,要用的时候将保存的模型进行加载. PyTorch 中保存模型主要分为两类:保存整个模型和只保存模型参数. A common PyTorch conve ...
最新文章
- 贪心:remove K digits移除K个数字
- 修改新版am335x支持1G主频的方法[来自A Xian调试记录]
- [C++学习笔记]C++常见问题大全(二)
- 最后一天,最后一刻。。。。。。情理之中,意料之外。。。。。。
- 2020牛客暑期多校训练营(第四场)H.Harder Gcd Problem(把1到n分为不互质的数对,找最多的对数)
- 云计算的认识和看法_云存储已经成为存储的未来,你的存储跟上节奏了吗?
- vue路由+ elementUI表格组件:loop文章列表页enter内容页(vue路由传参userid)- 代码篇
- 【设计模式】设计模式C++编程实现之策略模式(Strategy Pattern)
- 'nmake' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- 如何解决Mac苹果上运行VMware Fusion虚拟机提示“未找到文件”
- bzoj3210: 花神的浇花集会
- CodeRush For .Net 使用-------使用标签
- Oracle和MySQL语法区别
- 命令行工具抓取trace
- could not initialize javavm mysql_Could not initialize JavaVM
- 抛出异常关键字throw与定义异常关键字throws
- 京东VC后台自动批量上传主图 大聪明自动传主图 c# selenium网页自动化传图
- 台式机插上耳机没有声音
- Docker所在目录以及查询正在运行容器的所在位置
- 华为P20无敌拍摄能力开放 如何即刻获得?
热门文章
- python aiohttp模块
- 190405每日一句
- HTC 手柄扣动板机出现射线以及碰撞点用小球表示
- Atiitt 自我学习法流程 1.预先阶段 1.1.目标搜索 资料搜索 1.2. 1.3.通过关联关键词 抽象 等领域 拓展拓宽体系树 1.4. 2.分析整理阶段 2.1.找出重点 压缩要学会
- Atitit 转移特效attilax总结
- Atitit 软件项目非法模块与功能的管理与 监狱管理的对比 原理与概论attilax总结
- paip.c++ 开发 api 手册文档总结
- paip.重装系统需要备份的资料总结..
- Rust: (作者 洛佳) 使用Rust编写操作系统(附录一):链接器参数
- 西贝凭什么一年做到50多亿?| 独创的合伙人制:创业分部+赛场制