2016-11-28 20 views
11

保存されたSVMモデルをロードしようとしてこのエラーが発生しました。私はsklearn、numpyおよびscipyをアンインストールしてみました。最新バージョンをすべて一緒に再インストールしました(pipを使用して)。私はまだこのエラーが発生しています。どうして?RuntimeWarning:numpy.dtypeのサイズが変更されました。バイナリの非互換性を示す可能性があります

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:私はまだそれが最初の場所で発生した理由はわかりませんカントーhereに従うことにより、[OK]を、そして

pip uninstall -y scipy scikit-learn 
pip install --no-use-wheel scipy scikit-learn 

エラーは今

+1

にPythonのバージョンを更新することでこの問題を解決しました。 –

答えて

17

はよると...、行ってきました〜MAINT: silence Cython warnings about changes dtype/ufunc size. - numpy/numpy

これらの警告は、インストールされているより古いnumpyに対してコンパイルされたscipy(または別の パッケージ)をインポートするたびに可。

チェックはCythonによって挿入されます(したがって、コンパイルされたモジュールに存在します)。

かいつまんで、これらの警告は、これらのメッセージがnumpy 1.8(このコミット枝が上に行ってきました)ので、除外されnumpyの特定の場合には良性である、とすべきです。 while scikit-learn 0.18.1 is compiled against numpy 1.6.1。これらの警告を自分でフィルタリングするに

、あなたが同じas the patch doesを行うことができます。

もちろん
import warnings 
warnings.filterwarnings("ignore", message="numpy.dtype size changed") 
warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 

場合は、だけではなく、pip install --no-use-wheelをお近くのnumpyに対してソースからを、影響を受けるすべてのモジュールを再コンパイルすることができますそのためにボールが個のボールを持っています。


長い物語:特に危険numpyとがあってはならないclaimsパッチの提唱者、およびサードパーティ製のパッケージが意図的に古いバージョンに対して構築されています

ない[現在のnumpyのに対して、再構築のすべてがあります]実現可能な解決策であり、必ずしも必要ではないはずです。 Scipy(多くの他の パッケージ)は、いくつかのバージョンのnumpyと互換性があります。したがって、 はscipyバイナリを配布するときにサポートされている最も低い番号の numpyバージョン(現在は1.5.1)に対してビルドし、1.6.x、1.7.x、 numpy masterでも動作します。

のdtypes/ufuncsのサイズがABIを壊すように変更された場合、Cythonのみが警告を出すだけで、それ以外の場合はサイレントになるでしょう。その結果、

、Cythonの開発者agreed to trust the numpy team with maintaining binary compatibility by handので、我々はおそらくABIの変更を破るとバージョンを使用して、特別に細工された例外または他のいくつかの明示的なショーストッパーをもたらすであろうことを期待することができます。

+0

これは徹底した有益な答えです。それを受け入れる、@ Blue482。 – rspeer

0

インポート時にエラー情報が表示されます。RuntimeWarning:組み込み .typeのサイズが変更された場合、バイナリの互換性がない可能性があります。予想ZDは、

をZDてしまった私は、 `--no-使用-wheel`は、あなたのシステムに持っているものは何でもに対してソースからモジュールを再コンパイル2.7.2から2.7.13

関連する問題