Eu tenho esse erro ao tentar carregar um modelo SVM salvo. Tentei desinstalar o sklearn, NumPy e SciPy, reinstalando as versões mais recentes novamente (usando pip). Ainda estou recebendo esse erro. 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
UPDATE: OK, seguindo aqui e
pip uninstall -y scipy scikit-learn
pip install --no-binary scipy scikit-learn
O erro foi resolvido, embora eu ainda não tenha idéia do por que ocorreu em primeiro lugar ...
python
numpy
scikit-learn
Blue482
fonte
fonte
--no-use-wheel
recompila o módulo da fonte com relação ao que você tem no seu sistema.--no-binary
.pip install --no-binary :all: pandas
. FWIW Eu estava recebendo esse erro em uma nova versão do VE sobre a versão do PythonPython 3.6.6 :: Anaconda, Inc.
com apenasrequests
epandas
instalada no ambiente.gfortran
scipy para compilar:sudo apt install gfortran
Respostas:
De acordo com o MAINT: silencie os avisos do Cython sobre alterações de tamanho de tipo / ufunc. - numpy / numpy :
e as verificações são inseridas pelo Cython (portanto, estão presentes em qualquer módulo compilado).
Para encurtar a história, esses avisos devem ser benignos no caso particular de
numpy
, e essas mensagens são filtradas desdenumpy 1.8
(o ramo em que este commit entrou). Enquantoscikit-learn 0.18.1
é compiladonumpy 1.6.1
.Para filtrar esses avisos , você pode fazer o mesmo que o patch :
Claro, você pode apenas recompilar todos os módulos afetados de fonte contra a sua locais
numpy
compip install --no-binary :all:
¹ vez se você tem asbolas deferramentas para isso.História mais longa: o proponente do patch alega que não deve haver riscos específicos
numpy
, e pacotes de terceiros são criados intencionalmente contra versões mais antigas:Como resultado, os desenvolvedores do Cython concordaram em confiar à equipe numpy a manutenção da compatibilidade binária manualmente , portanto, podemos esperar que o uso de versões com alterações de ABI quebradas geraria uma exceção especialmente criada ou algum outro impedimento explícito.
¹ A
--no-use-wheel
opção disponível anteriormente foi removida desde entãopip 10.0.0
.fonte
--no-binary
, substituições per-requisito para arquivos requisitos . Além disso, vim aquipandas
, então aqui está apandas
questão relevante do GitHub .É a edição da nova versão numpy (1.15.0)
Você pode fazer o downgrade numpy e esse problema será corrigido:
sudo pip uninstall numpy
sudo pip install numpy==1.14.5
Isso está funcionando ..
fonte
pip install numpy==1.15.1
me passou de 1.15.0 para 1.15.1 e as mensagens de aviso foram embora.se você estiver em um ambiente anaconda, use:
fonte
conda update numpy
Eu tentei as maneiras acima mencionadas, mas nada funcionou. Mas o problema desapareceu depois que eu instalei as bibliotecas através da instalação apt,
Para Python3,
Para Python2,
Espero que ajude.
fonte
numpy
do repositório da distribuição oficial, e não do PyPI, é claro que todos serão compilados com o mesmonumpy
. A desvantagem é que você pode não estar recebendo as versões mais recentes.Basta atualizar seu módulo numpy, agora é 1.15.4. Para Windows
fonte
Este erro ocorre porque os pacotes instalados foram criados novamente com uma versão diferente do numpy.
Precisamos reconstruir scipy e scikit-learn contra o local
numpy
.Para novos
pip
(no meu casopip 18.0
) isso funcionou:--no-binary
leva uma lista de nomes de pacotes para os quais você deseja ignorar os binários. Nesse caso, passamos o--no-binary scipy,scikit-learn
que ignorará os binários dos pacotes scipy, scikit-learn. Não me ajudoufonte
Meta-informações: a maneira recomendada de instalar o sklearn
[... não compilar a partir da fonte usando pip]
fonte
Observe que, a partir do cython 0.29, há uma nova opção check_size que elimina o aviso na fonte, portanto, nenhuma solução alternativa deve ser necessária quando a versão percorrer os vários pacotes
fonte
Meu ambiente é Python 2.7.15
eu tento
mas não funciona. Mostra o erro:
Então eu tento:
E funciona: os avisos inúteis não aparecem.
fonte
--no-use-wheel
foi removida. Use em--no-binary :all:
vez disso.Ao importar scipy, as informações de erro mostram: RuntimeWarning: builtin .type tamanho alterado, pode indicar incompatibilidade binária. Zd esperado, obteve zd
Resolvi esse problema atualizando a versão python de 2.7.2 para 2.7.13
fonte