Mam ten błąd podczas próby załadowania zapisanego modelu SVM. Próbowałem odinstalować sklearn, NumPy i SciPy, ponownie instalując wszystkie najnowsze wersje (używając pip). Nadal otrzymuję ten błąd. Czemu?
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
AKTUALIZACJA: OK, podążając tutaj i
pip uninstall -y scipy scikit-learn
pip install --no-binary scipy scikit-learn
Błąd zniknął, chociaż nadal nie mam pojęcia, dlaczego wystąpił w pierwszej kolejności ...
python
numpy
scikit-learn
Niebieski482
źródło
źródło
--no-use-wheel
rekompiluje moduł ze źródła na wszystko, co masz w systemie.--no-binary
.pip install --no-binary :all: pandas
. FWIW Otrzymałem ten błąd na nowej kompilacji VE na wersji PythonaPython 3.6.6 :: Anaconda, Inc.
tylkorequests
ipandas
zainstalowanej w środowisku.gfortran
aby Scipy mógł skompilować:sudo apt install gfortran
Odpowiedzi:
Według MAINT: cisza Cython ostrzega o zmianach dtype / ufunc size. - numpy / numpy :
a czeki są wstawiane przez Cythona (stąd są obecne w każdym skompilowanym module).
Krótko mówiąc, te ostrzeżenia powinny być łagodne w konkretnym przypadku
numpy
, a te komunikaty są odfiltrowywane odnumpy 1.8
(gałęzi, do której trafiło zatwierdzenie). Whilescikit-learn 0.18.1
jest kompilowany przeciwkonumpy 1.6.1
.Aby samodzielnie filtrować te ostrzeżenia , możesz zrobić to samo, co robi łatka :
Oczywiście, można po prostu skompilować wszystkie moduły dotkniętych ze źródeł przeciwko lokalnym
numpy
zpip install --no-binary :all:
¹ zamiast jeśli maszkulenarzędzia do tego.Dłuższa historia: zwolennicy łatki twierdzą, że nie powinno być żadnego ryzyka
numpy
, a pakiety innych firm są celowo tworzone w oparciu o starsze wersje:W rezultacie programiści Cythona zgodzili się zaufać zespołowi numpy w kwestii ręcznego utrzymania kompatybilności binarnej , więc prawdopodobnie możemy się spodziewać, że używanie wersji z zepsutymi zmianami ABI przyniesie specjalnie spreparowany wyjątek lub inny wyraźny efekt zatrzymania .
¹ Wcześniej dostępna
--no-use-wheel
opcja została usunięta odpip 10.0.0
tego czasu .źródło
--no-binary
, nadpisania per-wymogiem dla plików wymagania . Przyszedłem tutajpandas
, więc oto odpowiednipandas
problem z GitHub .To kwestia nowej wersji numpy (1.15.0)
Możesz obniżyć wersję Numpy, a ten problem zostanie naprawiony:
sudo pip uninstall numpy
sudo pip install numpy==1.14.5
To działa ...
źródło
pip install numpy==1.15.1
dostałem mnie z 1.15.0 do 1.15.1 i ostrzeżenia zniknęły.jeśli jesteś w środowisku anakondy, użyj:
źródło
conda update numpy
Wypróbowałem wyżej wymienione sposoby, ale nic nie działało. Ale problem zniknął po zainstalowaniu bibliotek za pomocą apt install,
W przypadku Python3
W przypadku Python2
Mam nadzieję, że to pomoże.
źródło
numpy
z oficjalnego repozytorium dystrybucji, a nie z PyPI, oczywiście wszystkie są kompilowane z tym samymnumpy
. Wadą jest to, że możesz nie otrzymywać najnowszych wersji.Po prostu zaktualizuj swój moduł numpy, w tej chwili jest to 1.15.4. Dla Windowsa
źródło
Ten błąd występuje, ponieważ zainstalowane pakiety zostały zbudowane dla innej wersji numpy.
Musimy odbudować scipy i scikit-learn przeciwko lokalności
numpy
.Dla nowego
pip
(w moim przypadkupip 18.0
) to zadziałało:--no-binary
pobiera listę nazw pakietów, dla których chcesz zignorować pliki binarne. W tym przypadku przeszliśmy,--no-binary scipy,scikit-learn
która zignoruje pliki binarne dla pakietów scipy, scikit-learn. Nie pomogło miźródło
Meta-informacje: zalecany sposób instalacji sklearn
[... nie kompiluj ze źródła przy użyciu pip]
źródło
Zauważ, że od cython 0.29 jest nowa opcja check_size, która eliminuje ostrzeżenie u źródła, więc żadne obejście nie powinno być potrzebne, gdy ta wersja przeniknie do różnych pakietów
źródło
Moje środowisko to Python 2.7.15
próbuję
ale to nie działa. Pokazuje błąd:
Następnie próbuję:
I to działa: bezużyteczne ostrzeżenia się nie pojawiają.
źródło
--no-use-wheel
została usunięta. Użyj--no-binary :all:
zamiast tego.Podczas importu scipy informacje o błędzie pokazują: RuntimeWarning: wbudowany .type rozmiar zmieniony, może wskazywać na niezgodność binarną. Oczekiwano zd, dostałem zd
Rozwiązałem ten problem, aktualizując wersję Pythona z 2.7.2 na 2.7.13
źródło