170 votes

RuntimeWarning: la taille de numpy.dtype a été modifiée, ce qui peut indiquer une incompatibilité binaire

J'ai cette erreur pour essayer de charger un fichier sauvegardé SVM modèle. J'ai essayé de désinstaller sklearn, NumPy et SciPy, la réinstallation de la dernière version de tous les réunir à nouveau (à l'aide d'pip). J'ai toujours cette erreur. Pourquoi?

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

Mise à JOUR: OK, en suivant ici, et

pip uninstall -y scipy scikit-learn
pip install --no-binary scipy scikit-learn

L'erreur a disparu, mais je n'ai toujours aucune idée de pourquoi elle s'est produite en premier lieu...

164voto

ivan_pozdeev Points 2233

Selon MAINT: silence Cython mises en garde au sujet des changements dtype/ufunc taille. - numpy/numpy:

Ces avertissements sont visibles à chaque fois que vous importez scipy (ou d'une autre package) qui a été compilé à partir d'un ancien numpy qu'est installé.

et les contrôles sont insérés par Cython (d'où sont présents dans tous les modules compilés avec elle).

Longue histoire courte, ces mises en garde doivent être bénignes dans le cas particulier de l' numpy, et ces messages sont filtrés depuis numpy 1.8 (la direction de s'engager allé sur). Alors qu' scikit-learn 0.18.1 est compilé à l'encontre numpy 1.6.1.

Pour filtrer ces avertissements vous-même, vous pouvez faire la même chose que le patch n':

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

Bien sûr, vous pouvez simplement recompiler tous les modules affectés à partir de la source à l'encontre de votre local numpy avec pip install --no-binary :all:1 à la place si vous avez les boules d'outils.


Longue histoire: le patch du promoteur prétend , il devrait y avoir aucun risque spécifiquement numpy, et de la 3e partie paquets sont intentionnellement construit contre les anciennes versions:

[La reconstruction de tout contre-courant numpy est pas possible solution, et certainement ne devrait pas être nécessaire. Scipy (comme beaucoup d'autres paquets) est compatible avec un certain nombre de versions de numpy. Ainsi, lorsque nous distribuer scipy binaires, nous construisons contre les plus bas pris en charge numpy version 1.5.1 de maintenant) et ils travaillent à la 1.6.x, 1.7.x et numpy maître.

Le réel correcte serait pour Cython seulement d'émettre des avertissements lorsque la taille de dtypes/ufuncs a des changements d'une manière qui rompt l'ABI, et être le silence, sinon.

En conséquence, Cython est les devs ont convenu de faire confiance à la numpy équipe avec le maintien de la compatibilité binaire à la main, de sorte que l'on peut probablement s'attendre à ce que l'utilisation de versions avec la rupture des modifications d'ABI donnerait un spécialement conçu exception ou certains autres explicite show-bouchon.


1Le disponible auparavant en --no-use-wheel option a été supprimée depuis pip 10.0.0.

37voto

Parthiban.S Points 531

C'est la question de la nouvelle version de Numpy (1.15.0)

Vous pouvez rétrograder numpy et ce problème sera résolu:

sudo pip uninstall numpy

Enfin, numpy version 1.15.1 est disponible, les problèmes d’avertissement sont résolus.

sudo pip install numpy == 1.15.1

Cela fonctionne ..

9voto

J'ai essayé les méthodes mentionnées ci-dessus, mais rien n'a fonctionné. Mais le problème avait disparu après avoir installé les bibliothèques via apt install,

Pour Python3,

 pip3 uninstall -y numpy scipy pandas scikit-learn
sudo apt update
sudo apt install python3-numpy python3-scipy python3-pandas python3-sklearn 
 

Pour Python2,

 pip uninstall -y numpy scipy pandas scikit-learn
sudo apt update
sudo apt install python-numpy python-scipy python-pandas python-sklearn 
 

J'espère que cela pourra aider.

8voto

satyam_sareen Points 18

Il suffit de mettre à jour votre module numpy, il est actuellement 1.15.4 Pour les fenêtres

 pip install numpy --upgrade
 

7voto

H. Shad Points 49

si vous êtes dans un environnement anaconda, utilisez:

 conda update --all
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X