Tengo este error al intentar cargar un modelo SVM guardado. He intentado desinstalar sklearn, NumPy y SciPy, reinstalando las últimas versiones completamente juntas (usando pip). Todavía recibo este error. ¿Por qué?
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
ACTUALIZACIÓN: OK, siguiendo aquí , y
pip uninstall -y scipy scikit-learn
pip install --no-binary scipy scikit-learn
El error ahora se ha ido, aunque todavía no tengo idea de por qué ocurrió ...
python
numpy
scikit-learn
Blue482
fuente
fuente
--no-use-wheel
recompila el módulo desde la fuente contra lo que tenga en su sistema.--no-binary
.pip install --no-binary :all: pandas
. FWIW Estaba recibiendo este error en una nueva versión de VE sobre la versión de PythonPython 3.6.6 :: Anaconda, Inc.
con solorequests
epandas
instalado en el entorno.gfortran
Scipy para compilar:sudo apt install gfortran
Respuestas:
Según MAINT: silencia las advertencias de Cython sobre los cambios en el tamaño dtype / ufunc. - numpy / numpy :
y Cython inserta las comprobaciones (por lo tanto, están presentes en cualquier módulo compilado con él).
En pocas palabras, estas advertencias deben ser benignas en el caso particular de
numpy
, y estos mensajes se filtran desdenumpy 1.8
(la rama a la que se envió este compromiso). Mientrasscikit-learn 0.18.1
se compila contranumpy 1.6.1
.Para filtrar estas advertencias usted mismo , puede hacer lo mismo que el parche :
Por supuesto, puede recompilar todos los módulos afectados desde la fuente contra su local
numpy
conpip install --no-binary :all:
¹ en su lugar si tiene las herramientas debolaspara eso.Una historia más larga: el proponente del parche afirma que no debería haber ningún riesgo específicamente con
numpy
, y los paquetes de terceros se construyen intencionalmente contra versiones anteriores:Como resultado, los desarrolladores de Cython acordaron confiar en que el equipo numpy mantendría la compatibilidad binaria a mano , por lo que probablemente podamos esperar que el uso de versiones con cambios de ABI de última generación produzca una excepción especialmente diseñada o algún otro show-stopper explícito.
¹ La
--no-use-wheel
opción disponible anteriormente se ha eliminado desde entoncespip 10.0.0
.fuente
--no-binary
, anulaciones por-requisito para archivos requisitos . Además, vine aquípandas
, así que aquí está elpandas
problema relevante de GitHub .Es el tema de la nueva versión numpy (1.15.0)
Puede degradar numpy y se solucionará este problema:
sudo pip uninstall numpy
sudo pip install numpy==1.14.5
Esto esta funcionando ..
fuente
pip install numpy==1.15.1
me llevó de 1.15.0 a 1.15.1 y los mensajes de advertencia desaparecieron.Si está en un entorno de anaconda, utilice:
fuente
conda update numpy
He intentado las formas mencionadas anteriormente, pero nada funcionó. Pero el problema desapareció después de instalar las bibliotecas a través de apt install,
Para Python3,
Para Python2,
Espero que ayude.
fuente
numpy
, desde el repositorio de la distribución oficial en lugar de desde PyPI, por supuesto, todos se compilan contra esonumpy
. La desventaja es que es posible que no obtenga las últimas versiones.Simplemente actualice su módulo numpy, ahora es 1.15.4. Para ventanas
fuente
Este error se produce porque los paquetes instalados se compilaron contra una versión diferente de numpy.
Necesitamos reconstruir scipy y scikit-learn contra el local
numpy
.Para nuevo
pip
(en mi casopip 18.0
) esto funcionó:--no-binary
toma una lista de nombres de paquetes para los que desea ignorar los binarios. En este caso pasamos--no-binary scipy,scikit-learn
lo que ignorará los binarios para paquetes scipy, scikit-learn. No me ayudofuente
Metainformación : la forma recomendada de instalar sklearn
[... no compilar desde la fuente usando pip]
fuente
Tenga en cuenta que a partir de cython 0.29 hay una nueva opción check_size que elimina la advertencia en la fuente, por lo que no se necesitarán soluciones alternativas una vez que la versión se filtre a los diversos paquetes
fuente
Mi ambiente es Python 2.7.15
lo intento
Pero no funciona. Muestra el error:
Entonces intento:
Y funciona: las advertencias inútiles no se muestran.
fuente
--no-use-wheel
ha sido eliminada. Usar en su--no-binary :all:
lugar.Al importar scipy, la información de error muestra: RuntimeWarning: el tamaño incorporado del tipo. Cambiado, puede indicar incompatibilidad binaria. Zd esperado, tengo zd
Resolví este problema actualizando la versión de Python de 2.7.2 a 2.7.13
fuente