Somehow a lambda is sneaking into the code and causing a pickle error on learn.load but I haven’t figured out to solve it. Does anyone have some clever workarounds?
The error is:
I am certain it is related to purge due to the traceback below. I am less certain that the lamba problem is in torch/serialization.py or how to solve it.
---------------------------------------------------------------------------
PicklingError Traceback (most recent call last)
<ipython-input-22-1870fe106b65> in <module>
----> 1 learn.load('bestdog')
~/anaconda3/lib/python3.7/site-packages/fastai/basic_train.py in load(self, file, device, strict, with_opt, purge, remove_module)
262 with_opt:bool=None, purge:bool=True, remove_module:bool=False):
263 "Load model and optimizer state (if `with_opt`) `file` from `self.model_dir` using `device`. `file` can be file-like (file or buffer)"
--> 264 if purge: self.purge(clear_opt=ifnone(with_opt, False))
265 if device is None: device = self.data.device
266 elif isinstance(device, int): device = torch.device('cuda', device)
~/anaconda3/lib/python3.7/site-packages/fastai/basic_train.py in purge(self, clear_opt)
314
315 tmp_file = get_tmp_file(self.path/self.model_dir)
--> 316 torch.save(state, open(tmp_file, 'wb'))
317 for a in attrs_del: delattr(self, a)
318 gc.collect()
~/anaconda3/lib/python3.7/site-packages/torch/serialization.py in save(obj, f, pickle_module, pickle_protocol)
217 >>> torch.save(x, buffer)
218 """
--> 219 return _with_file_like(f, "wb", lambda f: _save(obj, f, pickle_module, pickle_protocol))
220
221
~/anaconda3/lib/python3.7/site-packages/torch/serialization.py in _with_file_like(f, mode, body)
142 f = open(f, mode)
143 try:
--> 144 return body(f)
145 finally:
146 if new_fd:
~/anaconda3/lib/python3.7/site-packages/torch/serialization.py in <lambda>(f)
217 >>> torch.save(x, buffer)
218 """
--> 219 return _with_file_like(f, "wb", lambda f: _save(obj, f, pickle_module, pickle_protocol))
220
221
~/anaconda3/lib/python3.7/site-packages/torch/serialization.py in _save(obj, f, pickle_module, pickle_protocol)
290 pickler = pickle_module.Pickler(f, protocol=pickle_protocol)
291 pickler.persistent_id = persistent_id
--> 292 pickler.dump(obj)
293
294 serialized_storage_keys = sorted(serialized_storages.keys())
PicklingError: Can't pickle <function <lambda> at 0x7fef07919158>: attribute lookup <lambda> on pretrainedmodels.models.resnext_features.resnext101_32x4d_features failed