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 wieder zusammen zu installieren (Pip). Ich bekomme 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, indem Sie here , und folgen
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 ...
Laut MAINT: Cython-Warnungen über Änderungen von dtype/ufunc-Größe zum Schweigen bringen. - numpy/numpy :
Diese Warnungen werden angezeigt, wenn Sie scipy (oder ein anderes Paket) importieren, das mit einer älteren als der installierten Nummer kompiliert wurde.
und die Schecks werden von Cython eingefügt (sind also in jedem damit kompilierten Modul vorhanden).
Um es kurz zu machen, diese Warnungen sollten im speziellen Fall von numpy
harmlos sein, und diese Nachrichten werden seit numpy 1.8
(der Zweig, in den dieses Commit ging). While scikit-learn 0.18.1
Wird gegen numpy 1.6.1
Kompiliert .
Um diese Warnungen selbst zu filtern , können Sie dasselbe tun wie im Patch :
import warnings
warnings.filterwarnings("ignore", message="numpy.dtype size changed")
warnings.filterwarnings("ignore", message="numpy.ufunc size changed")
Natürlich können Sie mit einfach alle betroffenen Module aus dem Quellcode gegen Ihr lokales numpy
mit pip install --no-binary :all:
¹ neu kompilieren. wenn du die hast bälle Werkzeuge dafür.
Längere Geschichte: Der Befürworter des Patches Ansprüche Speziell mit numpy
sollte kein Risiko bestehen, und Pakete von Drittanbietern wurden absichtlich gegen ältere Versionen erstellt:
Es ist keine praktikable Lösung, alles gegen die derzeitige Narrheit wieder aufzubauen, und es sollte sicherlich nicht notwendig sein. Scipy (wie viele andere Pakete) ist mit einer Reihe von numpy-Versionen kompatibel. Wenn wir also Scipy-Binärdateien verteilen, bauen wir sie gegen die niedrigste unterstützte NumPy-Version (1.5.1 ab sofort) und sie funktionieren auch mit 1.6.x, 1.7.x und NumPy Master.
Richtig wäre, wenn Cython nur dann Warnungen ausgibt, wenn sich die Größe von dtypes/ufuncs auf eine Weise ändert, die den ABI bricht, und ansonsten schweigt.
Infolgedessen haben Cythons Entwickler sich darauf geeinigt, dem Numpy-Team die Aufrechterhaltung der Binärkompatibilität von Hand anzuvertrauen , sodass wir wahrscheinlich davon ausgehen können, dass die Verwendung von Versionen mit aktuellen ABI-Änderungen eine speziell gestaltete Ausnahme oder eine andere explizite Show zur Folge hat -Stopper.
¹Die zuvor verfügbare Option --no-use-wheel
Wurde entfernt seit pip 10.0.0
.
Es ist das Problem der neuen numpy-Version (1.15.0)
Sie können numpy downgrade und dieses Problem wird behoben:
Sudo pip uninstall numpy
Sudo pip install numpy==1.14.5
Schließlich wird die numpy 1.15.1-Version veröffentlicht, sodass die Warnprobleme behoben werden.
Sudo pip install numpy == 1.15.1
Das funktioniert ...
Ich habe die oben genannten Möglichkeiten ausprobiert, aber nichts hat funktioniert. Das Problem war jedoch verschwunden, nachdem ich die Bibliotheken durch apt install installiert hatte.
Für Python3
pip3 uninstall -y numpy scipy pandas scikit-learn
Sudo apt update
Sudo apt install python3-numpy python3-scipy python3-pandas python3-sklearn
Für Python2
pip uninstall -y numpy scipy pandas scikit-learn
Sudo apt update
Sudo apt install python-numpy python-scipy python-pandas python-sklearn
Hoffentlich hilft das.
wenn Sie sich in einer Anaconda-Umgebung befinden, verwenden Sie:
conda update --all
Aktualisieren Sie einfach Ihr numpy-Modul, jetzt ist es 1.15.4. Für Windows
pip install numpy --upgrade
Dieser Fehler tritt auf, weil die installierten Pakete gegen eine andere Version von Numpy erstellt wurden.
Wir müssen scipy und scikit-learn gegen die lokale numpy
umbauen.
Für neue pip
(in meinem Fall pip 18.0
) hat dies funktioniert:
pip uninstall -y scipy scikit-learn
pip install --no-binary scipy,scikit-learn -I scipy scikit-learn
--no-binary
nimmt eine Liste mit Namen von Paketen, für die Sie Binärdateien ignorieren möchten. In diesem Fall haben wir --no-binary scipy,scikit-learn
übergeben, der Binärdateien für Pakete scipy, scikit-learn ..__ ignoriert. Hat mir nicht geholfen
Beachten Sie, dass es ab Cython 0.29 eine neue check_size-Option gibt, mit der die Warnung an der Quelle beseitigt wird. Daher sollten keine Problemumgehungen erforderlich sein, sobald diese Version in die verschiedenen Pakete übergeht
Metainformationen: Die empfohlene Installationsmethode für sklearn
Wenn Sie bereits über eine funktionierende Installation von Numpy und Scipy verfügen, wird der Der einfachste Weg, um scikit-learn zu installieren, ist
pip
pip install -U scikit-learn
oder
conda
:conda install scikit-learn
[... nicht vom Quellcode mit pip kopieren]
Wenn Sie noch keine Python-Installation mit Numpy und Scipy haben, empfehlen wir die Installation entweder über Ihren Paketmanager oder über apythonbundle . Diese enthalten Numpy, Scipy, Scikit-Learn, Matplotlib und viele andere hilfreiche Bibliotheken für Wissenschaft und Datenverarbeitung.