我正在尝试从RLLib(json didn't work as shown in this post)还原一个pickle配置文件,并出现以下错误:
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中打开此文件
如果由于pickle5的依赖性(主要是Visual Building c++)而无法加载它,另一个解决方案可能是更改正在使用的Python解释器(在错误发生之前,将其更改为旧的解释器)。对我来说,我在空闲状态下运行了一个在Spyder中运行的程序后,出现了这个错误。当我在Spyder中再次运行它时,它放弃了这个错误
为了解决这个问题,在Spyder中,我将Python解释器更改为IDLE使用的Python(工具->;首选项)。重新启动Spyder后,我必须使用命令提示符安装必要的依赖项,以便在Spyder中使用控制台:
当然,这可能会在Spyder中引入一些不规则性(即,由于解释器不同,它应该附带的包不再存在)。在调试时应该很容易地使用它们,并使用标准pip安装解决这些问题
一旦恢复了(被认为丢失的)文件,最好考虑恢复到Spyder的Python解释器,并更新代码以优雅地处理此问题(如果有人能在注释中建议如何执行此操作,而不需要pickle5,我会很高兴!)
对于在python 3.8中使用协议5将数据帧保存到pickle文件并需要将其加载到仅支持协议4的python 3.6中的pandas用户(我正在查看您的google colab):
还可以从Python3.6保存到protocol-4 pickle中
更新:如果从stable-baselines3加载模型时遇到此问题:
2021年5月31日使用env进行测试:
参考:https://brainsteam.co.uk/2021/01/14/pickle-5-madness-with-mlflow/
使用pickle5或将其加载到Python3.8+中,然后使用protocol参数将其序列化到较低版本
相关问题 更多 >
编程相关推荐