![](/img/trans.png)
[英]python sklearn pickled model doesn't have the same number of features
[英]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.