我正在尝试从RLLib (json没有像这篇文章所显示的那样工作)恢复一个带泡菜的配置文件,并得到以下错误:
config = pickle.load(open(f"{path}/params.pkl", "rb"))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-28-c964561b863c> in <module>
----> 1 config = pickle.load(open(f"{path}/params.pkl", "rb"))
ValueError: unsupported pickle protocol: 5
Python版本= 3.7.0
如何在3.7中打开此文件?
发布于 2020-08-09 18:08:10
使用pickle5或将其加载到python 3.8+中,然后使用协议参数将其序列化到较低的版本。
发布于 2020-12-16 07:18:47
对于将数据保存到python3.8中带有协议5的泡菜文件并只支持协议4的python3.6(我正在看google )的熊猫用户:
!pip3 install pickle5
import pickle5 as pickle
with open(path_to_protocol5, "rb") as fh:
data = pickle.load(fh)
还可以保存到python 3.6中的协议-4泡菜中。
data.to_pickle(path_to_protocol4)
更新:如果在从稳定数据库3加载模型时面临这种情况:
!pip install --upgrade --quiet cloudpickle pickle5
from stable_baselines3 import PPO
# restart kernel if in jupyter notebook
# Might not need this dict in all cases
custom_objects = {
"lr_schedule": lambda x: .003,
"clip_range": lambda x: .02
}
model = PPO.load("path/to/model.zip", custom_objects=custom_objects)
在2021-05-31上用env测试:
cloudpickle: 1.6.0
pickle5: 0.0.11
stable-baselines3: 1.0
参考资料:https://brainsteam.co.uk/2021/01/14/pickle-5-madness-with-mlflow/
发布于 2021-02-22 16:13:04
如果由于pickle5的依赖关系(主要是Visual )而无法加载pickle5,另一种解决方案可能是在错误发生之前更改所使用的Python解释器(改为旧的)。对我来说,在运行一个在Spyder中运行的空闲程序之后,我得到了这个错误。当我在Spyder中再次运行它时,它删除了这个错误。
Python Error: Unsupported Pickle Protocol 5
为了解决这个问题,在Spyder中,我将我的Python解释器更改为与IDLE一起使用的Python (Tools -> Preferences)。重新启动Spyder之后,必须使用命令提示符安装必要的依赖项,以便在Spyder中使用控制台:
pip install spyder-kernels
当然,这可能会在Spyder中引入一些不正常的地方(也就是说,它应该附带的包由于解释器不同而不再存在)。在调试时,这些问题应该很容易解决,并使用标准的pip安装来解决。
一旦您恢复了您的文件(被认为丢失了),最好考虑恢复到Spyder的Python解释器,并更新代码以优雅地处理这个问题(如果有人能在评论中建议不需要pickle5!)
https://stackoverflow.com/questions/63329657
复制相似问题