Ich habe diesen Fehler beim Versuch, ein gespeichertes SVM-Modell zu laden. Ich habe versucht, sklearn, NumPy und SciPy zu deinstallieren und die neuesten Versionen erneut zusammen zu installieren (mithilfe von pip). Ich erhalte immer noch diesen Fehler. Warum?
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, folgen Sie hier und
pip uninstall -y scipy scikit-learn
pip install --no-binary scipy scikit-learn
Der Fehler ist jetzt verschwunden, obwohl ich immer noch keine Ahnung habe, warum er überhaupt aufgetreten ist ...
python
numpy
scikit-learn
Blue482
quelle
quelle
--no-use-wheel
Kompiliert das Modul von der Quelle neu mit dem, was Sie auf Ihrem System haben.--no-binary
.pip install --no-binary :all: pandas
. FWIW Ich war immer dieser Fehler auf einem frisches VE baut auf der Python - VersionPython 3.6.6 :: Anaconda, Inc.
mit nurrequests
undpandas
in der Umgebung installiert.gfortran
damit scipy kompiliert:sudo apt install gfortran
Antworten:
Laut MAINT: Cython warnt vor Änderungen dtype / ufunc size. - numpy / numpy :
und die Prüfungen werden von Cython eingefügt (sind also in jedem damit kompilierten Modul vorhanden).
Kurz gesagt, diese Warnungen sollten im speziellen Fall von harmlos sein
numpy
, und diese Nachrichten werden seitdem herausgefiltertnumpy 1.8
(der Zweig, auf den dieses Commit ging). Whilescikit-learn 0.18.1
wird dagegen kompiliertnumpy 1.6.1
.Um diese Warnungen selbst zu filtern , können Sie dasselbe tun wie mit dem Patch :
Natürlich können Sie
numpy
stattdessen alle betroffenen Module von der Quelle mitpip install --no-binary :all:
¹ gegen Ihr lokales Modul neu kompilieren, wenn Sie dieBalls-Tools dafür haben.Längere Geschichte: Der Befürworter des Patches behauptet, dass es kein spezifisches Risiko geben sollte
numpy
, und Pakete von Drittanbietern wurden absichtlich gegen ältere Versionen entwickelt:Infolgedessen stimmten die Entwickler von Cython zu, dem Numpy-Team die Aufrechterhaltung der Binärkompatibilität von Hand anzuvertrauen , sodass wir wahrscheinlich erwarten können, dass die Verwendung von Versionen mit brechenden ABI-Änderungen zu einer speziell gestalteten Ausnahme oder einem anderen expliziten Show-Stopper führen würde.
¹ Die bisher verfügbare
--no-use-wheel
Option wurde entfernt , dapip 10.0.0
.quelle
--no-binary
, pro-Anforderung Überschreibungen für Anforderungen Dateien . Außerdem bin ich hierher gekommenpandas
, also hier ist das relevantepandas
GitHub-Problem .Es ist die Ausgabe der neuen Numpy-Version (1.15.0)
Sie können numpy downgraden und dieses Problem wird behoben:
sudo pip uninstall numpy
sudo pip install numpy==1.14.5
Das funktioniert ..
quelle
pip install numpy==1.15.1
habe mich von 1.15.0 auf 1.15.1 gebracht und die Warnmeldungen sind verschwunden.Wenn Sie sich in einer Anakonda-Umgebung befinden, verwenden Sie:
quelle
conda update numpy
Ich habe die oben genannten Methoden ausprobiert, aber nichts hat funktioniert. Aber das Problem war behoben, nachdem ich die Bibliotheken durch apt install installiert hatte.
Für Python3
Für Python2
Hoffentlich hilft das.
quelle
numpy
aus dem Repository der offiziellen Distribution und nicht aus PyPI, werden diese natürlich alle gegen dasselbe kompiliertnumpy
. Der Nachteil ist, dass Sie möglicherweise nicht die neuesten Versionen erhalten.Aktualisieren Sie einfach Ihr numpy-Modul, jetzt ist es 1.15.4. Für Windows
quelle
Dieser Fehler tritt auf, weil die installierten Pakete für eine andere Version von numpy erstellt wurden.
Wir müssen scipy und scikit-learn gegen die lokalen wieder aufbauen
numpy
.Für neue
pip
(in meinem Fallpip 18.0
) funktionierte dies:--no-binary
Nimmt eine Liste mit Namen von Paketen, für die Sie Binärdateien ignorieren möchten. In diesem Fall haben wir bestanden,--no-binary scipy,scikit-learn
die Binärdateien für Pakete scipy, scikit-learn ignorieren. Hat mir nicht geholfenquelle
Meta-Informationen: Die empfohlene Methode zur Installation von sklearn
[... nicht mit pip aus der Quelle kompilieren]
quelle
Beachten Sie, dass es ab Cython 0.29 eine neue Option check_size gibt , mit der die Warnung an der Quelle entfernt wird. Daher sollten keine Problemumgehungen erforderlich sein, sobald diese Version in die verschiedenen Pakete gelangt
quelle
Meine Umgebung ist Python 2.7.15
ich versuche
aber es funktioniert nicht. Es zeigt den Fehler:
Dann versuche ich:
Und es funktioniert: Die nutzlosen Warnungen werden nicht angezeigt.
quelle
--no-use-wheel
wurde entfernt. Verwenden Sie--no-binary :all:
stattdessen.Beim Import von Scipy werden folgende Fehlerinformationen angezeigt: RuntimeWarning: Die Größe des eingebauten Typs wurde geändert. Dies kann auf eine binäre Inkompatibilität hinweisen. Erwartet zd, bekam zd
Ich habe dieses Problem gelöst, indem ich die Python-Version von 2.7.2 auf 2.7.13 aktualisiert habe
quelle