it-swarm.com.de

RuntimeWarning: numpy.dtype size geändert, kann auf eine binäre Inkompatibilität hindeuten

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 ...

113
Blue482

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 .

137
ivan_pozdeev

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 ...

35
Parthiban.S

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.

7

wenn Sie sich in einer Anaconda-Umgebung befinden, verwenden Sie:

conda update --all
4
H. Shad

Aktualisieren Sie einfach Ihr numpy-Modul, jetzt ist es 1.15.4. Für Windows

pip install numpy --upgrade
1
satyam_sareen

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

1
Temak

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

0
mattip

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.

0
serv-inc