[解決済み】RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility.
質問
保存したSVMモデルを読み込もうとすると、このエラーが発生します。sklearn、NumPy、SciPyをアンインストールし、最新版をまとめて再インストール(pipを使用)してみました。それでもこのエラーが出ます。なぜでしょうか?
In [1]: import sklearn; print sklearn.__version__
0.18.1
In [3]: import numpy; print numpy.__version__
1.11.2
In [5]: import scipy; print scipy.__version__
0.18.1
In [7]: import pandas; print pandas.__version__
0.19.1
In [10]: clf = joblib.load('model/trained_model.pkl')
---------------------------------------------------------------------------
RuntimeWarning Traceback (most recent call last)
<ipython-input-10-5e5db1331757> in <module>()
----> 1 clf = joblib.load('sentiment_classification/model/trained_model.pkl')
/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/numpy_pickle.pyc in load(filename, mmap_mode)
573 return load_compatibility(fobj)
574
--> 575 obj = _unpickle(fobj, filename, mmap_mode)
576
577 return obj
/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/numpy_pickle.pyc in _unpickle(fobj, filename, mmap_mode)
505 obj = None
506 try:
--> 507 obj = unpickler.load()
508 if unpickler.compat_mode:
509 warnings.warn("The file '%s' has been generated with a "
/usr/lib/python2.7/pickle.pyc in load(self)
862 while 1:
863 key = read(1)
--> 864 dispatch[key](self)
865 except _Stop, stopinst:
866 return stopinst.value
/usr/lib/python2.7/pickle.pyc in load_global(self)
1094 module = self.readline()[:-1]
1095 name = self.readline()[:-1]
-> 1096 klass = self.find_class(module, name)
1097 self.append(klass)
1098 dispatch[GLOBAL] = load_global
/usr/lib/python2.7/pickle.pyc in find_class(self, module, name)
1128 def find_class(self, module, name):
1129 # Subclasses may override this
-> 1130 __import__(module)
1131 mod = sys.modules[module]
1132 klass = getattr(mod, name)
/usr/local/lib/python2.7/dist-packages/sklearn/svm/__init__.py in <module>()
11 # License: BSD 3 clause (C) INRIA 2010
12
---> 13 from .classes import SVC, NuSVC, SVR, NuSVR, OneClassSVM, LinearSVC, \
14 LinearSVR
15 from .bounds import l1_min_c
/usr/local/lib/python2.7/dist-packages/sklearn/svm/classes.py in <module>()
2 import numpy as np
3
----> 4 from .base import _fit_liblinear, BaseSVC, BaseLibSVM
5 from ..base import BaseEstimator, RegressorMixin
6 from ..linear_model.base import LinearClassifierMixin, SparseCoefMixin, \
/usr/local/lib/python2.7/dist-packages/sklearn/svm/base.py in <module>()
6 from abc import ABCMeta, abstractmethod
7
----> 8 from . import libsvm, liblinear
9 from . import libsvm_sparse
10 from ..base import BaseEstimator, ClassifierMixin
__init__.pxd in init sklearn.svm.libsvm (sklearn/svm/libsvm.c:10207)()
RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 80
UPDATE OK、以下の方法で こちら そして
pip uninstall -y scipy scikit-learn
pip install --no-binary scipy scikit-learn
エラーは解消されましたが、そもそもなぜ発生したのか、まだわかりません...。
解決方法
によると MAINT: dtype/ufunc サイズの変更に関する Cython 警告を消します。- numpy/numpy :
これらの警告は、scipy(または他の パッケージは、インストールされているものより古い numpy に対してコンパイルされています。
というチェックが Cython によって挿入されます (したがって、Cython でコンパイルされたすべてのモジュールに存在します)。
長くなりましたが
これらの警告は、以下のような特殊なケースにおいては無害であるべきです。
numpy
{を使用します。
そして
のため、これらのメッセージはフィルタリングされます。
numpy 1.8
(このコミットが実行されたブランチ)。一方
scikit-learn 0.18.1
に対してコンパイルされます。
numpy 1.6.1
.
これらの警告を自分でフィルタリングするには を実行することができます。 パッチが行うように :
import warnings
warnings.filterwarnings("ignore", message="numpy.dtype size changed")
warnings.filterwarnings("ignore", message="numpy.ufunc size changed")
もちろんです。
に対してソースから再コンパイルすることができます。
numpy
で
pip install --no-binary :all:
¹
代わりに
があれば
ボール
そのためのツールです。
長くなりましたが、パッチの提案者である クレーム で特にリスクはないはずです。 {コード {コード サードパーティーのパッケージは意図的に古いバージョンに対してビルドされています。
[現在のnumpyに対してすべてをリビルドすることは、] 実現不可能です。 の解決策であり、確かに必要ないはずです。Scipy (他の多くの パッケージは、いくつかのバージョンのnumpyと互換性があります。ですから、私たちが scipyのバイナリを配布する場合、サポートされる最も低いレベルのバイナリに対してビルドします。 numpyのバージョン(現時点では1.5.1)、1.6.x、1.7.x、および numpyマスターも同様です。
本当の正しさは、Cythonで dtypes/ufuncsのサイズがABIを破るような形で変更されました。 それ以外は黙認しています。
その結果、Cythonの開発者は バイナリ互換性を手作業で維持することをnumpyチームに任せることに合意しました。 そのため、ABIが変更されたバージョンを使用すると、特別に作られた例外や、その他の明示的なショーストッパーが発生することが予想されます。
¹
従来からある
{コード
オプションは削除されました
から
numpy
.
関連
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python カメの描画コマンドとその例
-
python implement mysql add delete check change サンプルコード
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない