目录

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'相关推荐

  1. python 多进程multiprocessing 队列queue报错:AttributeError: Can't pickle local object

    今天,test-191204-单个摄像头调用multiprocessing线程队列queue识别时,报错: D:\20191031_tensorflow_yolov3\python\python.ex ...

  2. dill:解决python的“AttributeError: Can‘t pickle local object”及无法pickle lambda函数的问题

    dill:解决python的"AttributeError: Can't pickle local object"及无法pickle lambda函数的问题 参考文章: (1)di ...

  3. 【Python】dill:解决python的“AttributeError: Can‘t pickle local object”及无法pickle lambda函数的问题

    [Python]dill:解决python的"AttributeError: Can't pickle local object"及无法pickle lambda函数的问题 pyt ...

  4. Can‘t pickle local object ‘get_transforms.<locals>.process‘

    Can't pickle local object 'get_transforms.<locals>.process' 网上的答案: AttributeError: Can't pickl ...

  5. Can't pickle local object 'CDLL.__init__.locals._FuncPtr'

    Can't pickle local object 'CDLL.__init__.<locals>._FuncPtr' 动态库代码: cv_dll=CDLL("E:\git_pr ...

  6. 使用pytorch时,遇到Can‘t pickle local object ‘xxx.<locals>.<lamba>‘的问题,注释有关部分有EOFError: Ran out of input问题

    如图,出现报错Can't pickle local object 'xxx..' 直接按照报错信息查网上,有许多可能的解答,有 pickle有限制,无法解析我模型文件中的lambda表达式 pickl ...

  7. PYTORCH保存模型时报错AttributeError: Can‘t pickle local object ‘Stage.__init__.<locals>.<lambda>‘

    解决方法: 点开报错的代码位置,将代码里面的import pickle改成import dill as pickle

  8. AttributeError: Can‘t pickle local object ‘GeneratorEnqueuer.start.<locals>.data_generator_task‘

     在win10上运行代码出现标题所示情况,最终通过修改两个地方内容完成代码的运行 1.将use_multiprocessing=True修改为use_multiprocessing=False 2.将 ...

  9. TypeError: cannot pickle ‘module‘ object

    创建python对象时报错: TypeError: cannot pickle 'module' object 原因: 很大可能是类成员错误的使用了第三方包(别名)等,具体排查方法可参考: impor ...

  10. PyTorch:模型save和load

    -柚子皮- 神经网络训练后我们需要将模型进行保存,要用的时候将保存的模型进行加载. PyTorch 中保存模型主要分为两类:保存整个模型和只保存模型参数. A common PyTorch conve ...

最新文章

  1. 贪心:remove K digits移除K个数字
  2. 修改新版am335x支持1G主频的方法[来自A Xian调试记录]
  3. [C++学习笔记]C++常见问题大全(二)
  4. 最后一天,最后一刻。。。。。。情理之中,意料之外。。。。。。
  5. 2020牛客暑期多校训练营(第四场)H.Harder Gcd Problem(把1到n分为不互质的数对,找最多的对数)
  6. 云计算的认识和看法_云存储已经成为存储的未来,你的存储跟上节奏了吗?
  7. vue路由+ elementUI表格组件:loop文章列表页enter内容页(vue路由传参userid)- 代码篇
  8. 【设计模式】设计模式C++编程实现之策略模式(Strategy Pattern)
  9. 'nmake' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  10. 如何解决Mac苹果上运行VMware Fusion虚拟机提示“未找到文件”
  11. bzoj3210: 花神的浇花集会
  12. CodeRush For .Net 使用-------使用标签
  13. Oracle和MySQL语法区别
  14. 命令行工具抓取trace
  15. could not initialize javavm mysql_Could not initialize JavaVM
  16. 抛出异常关键字throw与定义异常关键字throws
  17. 京东VC后台自动批量上传主图 大聪明自动传主图 c# selenium网页自动化传图
  18. 台式机插上耳机没有声音
  19. Docker所在目录以及查询正在运行容器的所在位置
  20. 华为P20无敌拍摄能力开放 如何即刻获得?

热门文章

  1. python aiohttp模块
  2. 190405每日一句
  3. HTC 手柄扣动板机出现射线以及碰撞点用小球表示
  4. Atiitt 自我学习法流程 1.预先阶段 1.1.目标搜索 资料搜索 1.2. 1.3.通过关联关键词 抽象 等领域 拓展拓宽体系树 1.4. 2.分析整理阶段 2.1.找出重点 压缩要学会
  5. Atitit 转移特效attilax总结
  6. Atitit 软件项目非法模块与功能的管理与  监狱管理的对比 原理与概论attilax总结
  7. paip.c++ 开发 api 手册文档总结
  8. paip.重装系统需要备份的资料总结..
  9. Rust: (作者 洛佳) 使用Rust编写操作系统(附录一):链接器参数
  10. 西贝凭什么一年做到50多亿?| 独创的合伙人制:创业分部+赛场制