RuntimeWarning: numpy.dtype boyutu değişti, ikili uyumsuzluğu gösterebilir


149

Kaydedilmiş bir SVM modelini yüklemeye çalışırken bu hatayı alıyorum. Sklearn, NumPy ve SciPy'yi kaldırmayı, en son sürümleri tekrar tekrar yüklemeyi (pip kullanarak) denedim. Hala bu hatayı alıyorum. Neden?

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

GÜNCELLEME: Tamam, burayı takip ederek ve

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

Hata şimdi gitti, yine de ilk etapta neden oluştuğuna dair hiçbir fikrim yok ...


3
--no-use-wheelmodülü, sisteminizde sahip olduğunuz her şeye karşı kaynaktan yeniden derler.
ivan_pozdeev

17
Pip'in daha yeni sürümlerinde bu komut olarak yeniden adlandırılmıştır --no-binary.
s_kirkiles

1
Evet, bu benim için çalıştı: pip install --no-binary :all: pandas. FWIW Bu hatayı Python 3.6.6 :: Anaconda, Inc.yalnızca ortama yüklenmiş requestsve Python sürümünün üstüne yeni bir VE derlemesinde alıyordum pandas.
2018


gfortransudo apt install gfortran
Scipy'nin

Yanıtlar:


152

MAINT'e göre : dtype / ufunc boyutundaki değişikliklerle ilgili Cython uyarılarını susturun. - uyuşuk / uyuşuk :

Bu uyarılar, kurulu olduğundan daha eski bir numpy ile derlenen scipy'yi (veya başka bir paketi) içe aktardığınızda görünür.

ve kontroller Cython tarafından eklenir (dolayısıyla onunla derlenen herhangi bir modülde mevcuttur).

Uzun lafın kısası, bu uyarılar belirli bir durumda zararsız olmalıdırnumpy ve bu mesajlar o zamandan beri filtrelenirnumpy 1.8 (bu işlemin gittiği dal). While scikit-learn 0.18.1karşı derlenirnumpy 1.6.1 .

Bu uyarıları kendiniz filtrelemek için yamanın yaptığı gibi yapabilirsiniz :

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

Tabii ki, bunun için top araçlarına sahipseniz, etkilenen tüm modülleri kaynağındannumpypip install --no-binary :all: yerelinize karşı ¹ ile yeniden derleyebilirsiniz .


Daha uzun hikaye: yamanın savunucuları özel olarak herhangi bir risk olmaması gerektiğini iddia ediyornumpy ve üçüncü taraf paketleri kasıtlı olarak eski sürümlere göre oluşturuldu:

[Her şeyi mevcut uyuşukluğa karşı yeniden inşa etmek] uygulanabilir bir çözüm değildir ve kesinlikle gerekli olmamalıdır. Scipy (diğer birçok paket gibi) bir dizi numpy sürümüyle uyumludur. Bu yüzden scipy ikili dosyalarını dağıttığımızda, bunları desteklenen en düşük numpy sürümüne (şu an itibariyle 1.5.1) karşı oluşturuyoruz ve 1.6.x, 1.7.x ve numpy master ile de çalışıyorlar.

Gerçek doğru, Cython için yalnızca dtypes / ufuncs boyutunun ABI'yi bozacak şekilde değiştiğinde uyarı vermesi ve aksi takdirde sessiz kalması olacaktır.

Sonuç olarak, Cython'un geliştiricileri , ikili uyumluluğu el ile sürdürme konusunda numpy ekibine güvenmeyi kabul etti , bu nedenle, ABI değişikliklerini kıran sürümleri kullanmanın, özel olarak hazırlanmış bir istisna veya başka bir açık gösteri durdurucu vereceğini bekleyebiliriz.


¹ önce mevcut --no-use-wheelseçeneği kaldırılmıştır beripip 10.0.0 .


1
Doc bağlantıları: --no-binary, gereksinimler dosyaları için başına gereksinimi geçersiz kılar . Ayrıca buraya bunun için geldim pandas, işte ilgili pandasGitHub sorunu .
eacousineau

35

Yeni numpy sürümünün sorunu (1.15.0)

Numpy'yi eski sürüme geçirebilirsiniz ve bu sorun çözülecektir:

sudo pip uninstall numpy
sudo pip install numpy==1.14.5

Son olarak uyuşuk 1.15.1 sürümü yayınlandı, böylece uyarı sorunları giderildi.

sudo pip install numpy == 1.15.1

Bu çalışıyor ..


6
Yanlışlıkla uyarıyı susturan kod 1.14.5 ile 1.15.0 arasında kaldırıldı. Düzeltme Ağustos 2018 sonuna kadar dışarı olmalıdır 1.15.1 hata düzeltme sürümü, bir parçasıdır
mattip

3
Teşekkürler @ mattip. pip install numpy==1.15.1beni 1.15.0'dan 1.15.1'e aldı ve uyarı mesajları kayboldu.
keithpjolley

Numpy 1.15.0 ile PyTables 3.4.4 ve H5Py sürüm 2.8.0'ı içe aktarırken yukarıdaki rapor uyarı mesajını aldım. Numpy 1.15.1 sürümünü yükledikten sonra uyarı kayboldu.
Güneş Ayı

8

Anaconda ortamındaysanız şunları kullanın:

conda update --all

2
Veya benim için işe yarayan sadece uyuşmuş olanı güncelleyin:conda update numpy
Dan King

8

Yukarıda belirtilen yolları denedim ama hiçbir şey işe yaramadı. Ama kütüphaneleri apt kurulumuyla kurduktan sonra sorun çözüldü,

Python3 için,

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

Python2 için,

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

Umarım yardımcı olur.


11
Py2 sürümlerini kaldırdınız ve Py3 sürümlerini yüklediniz.
percusse

Görünüşe göre python3 sürümlerini yüklemek de sorunumu çözdü.
Menuka Ishan

numpyPyPI yerine resmi dağıtım deposundan ikili paketler kurarsanız, elbette hepsi buna göre derlenir numpy. Olumsuz yanı, en son sürümleri alamayabilirsiniz.
ivan_pozdeev

7

Sadece numpy modülünüzü yükseltin, şu anda 1.15.4. Pencereler için

pip install numpy --upgrade

1

Bu hata, yüklenen paketlerin farklı numpy sürümüne yeniden oluşturulması nedeniyle oluşur.
Scipy ve scikit-learn'ü yerellere karşı yeniden inşa etmemiz gerekiyor numpy.

Yeni için pip(benim durumumda pip 18.0) bu işe yaradı:

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

--no-binaryikili dosyaları yok saymak istediğiniz paketlerin adlarının bir listesini alır. Bu durumda --no-binary scipy,scikit-learn, scipy, scikit-learn paketleri için ikili dosyaları yok sayacak geçtik. Bana yardım etmedi


0

Meta-bilgi: sklearn'ı kurmanın önerilen yolu

Zaten çalışan bir numpy ve scipy kurulumunuz varsa, scikit-learn'ü kurmanın en kolay yolu pip

pip install -U scikit-learn 

veya conda:

conda install scikit-learn

[... pip kullanarak kaynaktan derlemeyin]

Zaten numpy ve scipy ile bir python kurulumunuz yoksa, paket yöneticiniz veya bir python paketi aracılığıyla yüklemenizi öneririz . Bunlar numpy, scipy, scikit-learn, matplotlib ve diğer birçok yararlı bilimsel ve veri işleme kitaplığı ile birlikte gelir.



-3

Benim ortamım Python 2.7.15

denerim

pip uninstall
pip install --no-use-wheel

ama bu çalışmıyor. Hatayı gösterir:

böyle bir seçenek yok: - no-use-wheel

Sonra denerim:

pip uninstall
pip install --user --install-option="--prefix=" -U scikit-learn

Ve işe yarıyor: gereksiz uyarılar görünmüyor.


3
Seçenek --no-use-wheelkaldırıldı. --no-binary :all:Bunun yerine kullanın .
jmlarson

-5

Scipy'yi içe aktarırken, hata bilgisi şunu gösterir: RuntimeWarning: yerleşik .type boyutu değişti, ikili uyumsuzluğu gösterebilir. Beklenen zd, zd var

Bu sorunu python sürümünü 2.7.2'den 2.7.13'e güncelleyerek çözdüm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.