その中に、2つのscikit-learn
モデル、IsolationForest
とRandomForestClassifier
を含むオブジェクトがあります。このオブジェクトをピクルし、後でアンピクルして、予測の生成に使用します。 2つのモデルとは別に、オブジェクトには2つのStandardScaler
sと2つのPythonリストが含まれています。
joblib
を使用してこのオブジェクトをpickle化することは問題ありませんが、後でunpickleしようとすると、次の例外が発生します。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/(...)/python3.5/site-packages/joblib/numpy_pickle.py", line 578, in load
obj = _unpickle(fobj, filename, mmap_mode)
File "/home/(...)/python3.5/site-packages/joblib/numpy_pickle.py", line 508, in _unpickle
obj = unpickler.load()
File "/usr/lib/python3.5/pickle.py", line 1039, in load
dispatch[key[0]](self)
KeyError: 0
同じアプリケーションがオブジェクトのピクルとピクルを解除するため、scikit-learn
、joblib
と他のライブラリのバージョンは同じです。漠然としたエラーのため、どこからデバッグを開始すればよいかわかりません。アイデアやアドバイスはありますか?
これに対する解決策はかなり平凡でした:気付かずに、私はsklearn.externals.joblib
のjoblib
のバージョンを酸洗いに使用していましたが、オブジェクトのunpickleに新しいバージョンのjoblib
を使用していました。両方のタスクに新しいバージョンのjoblib
を使用すると、問題は解決しました。
たまたま、from sklearn.externals import joblib
を使用してモデルをエクスポートし、import joblib
を使用してロードしようとしました。
鉱山は面白かった。 git-lfs
したがって、ファイルは変更されており、joblibはそれらを開くことができませんでした。だから私はgit lfs pull
実際のファイルを取得します。したがって、互換性のあるjoblibバージョンを使用している場合は、ファイルが何らかの方法で変更されていないことを確認してください。