10

64 ビット マシンで joblib を使用してランダム フォレスト モデルをシリアル化し、32 ビット マシンで展開すると、例外があります。

ValueError: Buffer dtype mismatch, expected 'SIZE_t' but got 'long long'

この質問は以前に尋ねられました: Scikits-Learn RandomForrest training on 64bit python wont open on 32bit python . しかし、2014年以降、この質問には回答がありません。

モデルを学習するためのサンプル コード (64 ビット マシン上):

modelPath="../"
featureVec=...
labelVec = ...
forest = RandomForestClassifier()
randomSearch = RandomizedSearchCV(forest, param_distributions=param_dict, cv=10, scoring='accuracy',
                                      n_iter=100, refit=True)
randomSearch.fit(X=featureVec, y=labelVec)
model = randomSearch.best_estimator_
joblib.dump(model, modelPath)

32 ビット マシンで展開するサンプル コード:

modelPath="../"
model = joblib.load(modelPkl) # ValueError thrown here

私の質問は: 64 ビット マシンで学習し、予測のために 32 ビット マシンに移植する必要がある場合、この問題に対する一般的な回避策はありますか?

編集: joblib の代わりに pickle を直接使用しようとしました。まだ同じエラーがあります。コア pickle ライブラリでエラーが発生します (joblib と pickle の両方)。

  File "/usr/lib/python2.7/pickle.py", line 1378, in load
    return Unpickler(file).load()
  File "/usr/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib/python2.7/pickle.py", line 1133, in load_reduce
    value = func(*args)
  File "sklearn/tree/_tree.pyx", line 585, in sklearn.tree._tree.Tree.__cinit__ (sklearn/tree/_tree.c:7286)
ValueError: Buffer dtype mismatch, expected 'SIZE_t' but got 'long long'
4

0 に答える 0