gpt4 book ai didi

python - 如何在 Python 2 中加载 Python 3 Pickled SKlearn 模型

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:56 25 4
gpt4 key购买 nike

我有一个 Python 3.6 脚本,用于训练 SKLearn 模型,然后使用以下代码保存模型:

with open('filepath', 'wb') as f:
pickle.dump(trained_model, f, protocol=2)

当我尝试在 python 3.6 中加载 pickle 时,一切正常:

>>with open('filepath', 'rb') as f:
>> model = pickle.load(f)
>>
>>model

RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
max_depth=None, max_features='auto', max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=80, n_jobs=1,
oob_score=False, random_state=None, verbose=0,
warm_start=False)

当我在 Python 2.7 中运行相同的 pickle.load 命令时,出现以下错误:

>>with open('filepath', 'rb') as f:
>> model = pickle.load(f)

ValueError: non-string names in Numpy dtype unpickling

查看文档和类似案例,将协议(protocol)设置为 2应该使 pickle 文件兼容。是什么导致了这个问题?我该如何解决它?

最佳答案

您可以使用pickle._load()而不是 .load()force using a pure-Python implementation并获得更有用的回溯。

如果错误部分位于 numpy 的代码中,您仍然需要使用 C 调试器或手动跟踪源代码...
...或者使用 numpy pickle format spec 在输入到 numpy 的 unpickling 例程的部分上,并尝试猜测它出了什么问题!

  • pickletools.dis()为你做这个!它打印了 pickle 数据的反汇编,并带有偏移量。尽管您可能仍然需要规范来找出违规的性质。

也就是说,3.4. Model persistence — scikit-learn 0.19.1 documentation确实警告不支持在其他版本和/或架构中加载模型数据,并建议改为保存源 Material 。

关于python - 如何在 Python 2 中加载 Python 3 Pickled SKlearn 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com