我正在运行一些 Optuna 研究,当我尝试使用 保存它时joblib.dump
,我得到以下信息:
TypeError:无法腌制“_io.TextIOWrapper”对象
我也尝试过pickle.dump(study, open('name.pkl', 'wb'))
,但在这两种情况下我都得到了相同的结果编辑:现在我明白这与我在回调中这样做的事实有关,否则它可以工作我正在训练自定义 PyTorch 模型,其他一切似乎在研究本身方面起作用..但是当我尝试保存它时,我得到了上述错误。我对如何调试它一无所知。
环境:
- 带有 debian 10 虚拟机的 QubeOS
- 蟒蛇 3.8
- PyTorch 1.5
- Optuna 2.0 编辑:这是堆栈跟踪:
File "<ipython-input-3-f2187f915338>", line 1, in <module>
joblib.dump(study, f'{filepath}.pkl')
File "/opt/conda/envs/torch_38/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 480, in dump
NumpyPickler(f, protocol=protocol).dump(value)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 485, in dump
self.save(obj)
File "/opt/conda/envs/torch_38/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 282, in save
return Pickler.save(self, obj)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 601, in save
self.save_reduce(obj=obj, *rv)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 715, in save_reduce
save(state)
File "/opt/conda/envs/torch_38/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 282, in save
return Pickler.save(self, obj)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 558, in save
f(self, obj) # Call unbound method with explicit self
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 969, in save_dict
self._batch_setitems(obj.items())
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 995, in _batch_setitems
save(v)
File "/opt/conda/envs/torch_38/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 282, in save
return Pickler.save(self, obj)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 601, in save
self.save_reduce(obj=obj, *rv)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 715, in save_reduce
save(state)
File "/opt/conda/envs/torch_38/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 282, in save
return Pickler.save(self, obj)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 558, in save
f(self, obj) # Call unbound method with explicit self
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 969, in save_dict
self._batch_setitems(obj.items())
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 995, in _batch_setitems
save(v)
File "/opt/conda/envs/torch_38/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 282, in save
return Pickler.save(self, obj)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 601, in save
self.save_reduce(obj=obj, *rv)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 715, in save_reduce
save(state)
File "/opt/conda/envs/torch_38/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 282, in save
return Pickler.save(self, obj)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 558, in save
f(self, obj) # Call unbound method with explicit self
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 969, in save_dict
self._batch_setitems(obj.items())
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 995, in _batch_setitems
save(v)
File "/opt/conda/envs/torch_38/lib/python3.8/site-packages/joblib/numpy_pickle.py", line 282, in save
return Pickler.save(self, obj)
File "/opt/conda/envs/torch_38/lib/python3.8/pickle.py", line 576, in save
rv = reduce(self.proto)
TypeError: cannot pickle '_io.TextIOWrapper' object