簡體   English   中英

如何在 Python 2 中加載 Python 3 Pickled SKlearn 模型

[英]How to load Python 3 Pickled SKlearn Model in Python 2

我有一個 Python 3.6 腳本,用於訓練 SKLearn 模型,然后使用以下代碼保存模型:

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

當我嘗試在 python 3.6 中加載泡菜時,一切正常:

>>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

查看文檔和類似案例,將協議設置為 2應該使泡菜文件兼容。 是什么導致了這個問題,我該如何解決?

您可以使用pickle._load()代替.load()使用純Python實現力,並獲得更多有用的回溯。

如果錯誤部分在numpy的代碼中,您仍然需要使用 C 調試器或手動跟蹤源代碼......
...或者在饋入numpy的 unpickle 例程的部分上使用numpy pickle 格式規范,並嘗試猜測它有什么問題!

  • pickletools.dis()為你做這件事! 它打印了pickle 數據的反匯編,並帶有偏移量。 盡管您可能仍然需要規范來找出違規的性質。

也就是說, 3.4。 模型持久性——scikit-learn 0.19.1 文檔確實警告不支持在另一個版本和/或架構中加載模型數據,並建議保存源材料。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM