programing

런타임 경고: numpy.dtype 크기가 변경되었습니다. 이진 비호환성을 나타낼 수 있습니다.

muds 2023. 7. 15. 10:40
반응형

런타임 경고: numpy.dtype 크기가 변경되었습니다. 이진 비호환성을 나타낼 수 있습니다.

저장된 SVM 모델을 로드하려고 할 때 이 오류가 발생했습니다.저는 sklearn, NumPy, SciPy를 제거하고 최신 버전을 모두 다시 설치해 보았습니다(pip 사용).이 오류가 계속 발생합니다. 왜죠?

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

업데이트: 좋아요, 여기를 따라가면,

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

오류는 이제 사라졌지만, 왜 처음부터 발생했는지는 아직 알 수 없습니다.

MAINT에 따르면: dtype/ufunc 크기 변경에 대한 Cython 경고를 잠재웁니다. - numpy/numpy:

이 경고는 설치된 것보다 이전의 numpy에 대해 컴파일된 scipy(또는 다른 패키지)를 가져올 때마다 표시됩니다.

검사는 Cython에 의해 삽입됩니다(따라서 Cython과 함께 컴파일된 모든 모듈에 존재합니다).

간단히 말해서, 이러한 경고는 의 특정 경우에 양성이어야 하며, (이 커밋이 진행된 분기) 이후 이러한 메시지는 필터링됩니다.를 기준으로 컴파일합니다.

이러한 경고를 직접 필터링하려면 패치가 수행하는 작업과 동일하게 수행할 수 있습니다.

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

물론, 영향을 받는 모든 모듈을 소스에서 로컬로 재컴파일할 수 있습니다.pip install --no-binary :all:대신에 만약 당신이 그것을 위한 볼 도구를 가지고 있다면.


더 긴 이야기: 패치의 지지자는 특별히 위험이 없어야 한다고 주장합니다.numpy및 타사 패키지는 이전 버전에 대해 의도적으로 구축되었습니다.

[현재의 멍청이들을 상대로 모든 것을 재건하는 것은] 실현 가능한 해결책이 아니며, 물론 필요하지도 않습니다.Scipy(다른 많은 패키지와 마찬가지로)는 여러 버전의 numpy와 호환됩니다.따라서 scipy 바이너리를 배포할 때 지원되는 가장 낮은 numpy 버전(현재 1.5.1)을 기반으로 구축되며 1.6.x, 1.7.x 및 numpy 마스터와도 작동합니다.

진짜 정확한 것은 Cython이 dtype/ufuncs의 크기가 ABI를 깨는 방식으로 변경될 때만 경고를 발행하고 그렇지 않으면 침묵하는 것입니다.

결과적으로 Cython의 개발자들은 손으로 이진 호환성을 유지하는 numpy 팀을 신뢰하기로 동의했습니다. 따라서 ABI 변경 사항이 있는 버전을 사용하면 특수하게 조작된 예외나 다른 명시적인 쇼 스토퍼를 생성할 수 있을 것으로 예상할 수 있습니다.


¹The previously available --no-use-wheel option has been removed since pip 10.0.0.

새로운 numpy 버전(1.15.0)의 문제입니다.

numpy를 다운그레이드할 수 있으며 이 문제는 해결됩니다.

sudo pip uninstall numpy
sudo pip install numpy==1.14.5

마지막으로 numpy 1.15.1 버전이 릴리스되어 경고 문제가 해결되었습니다.

sudo pip 설치 numpy==1.15.1

효과가 있습니다.

위에 언급한 방법들을 시도해 보았지만, 아무 것도 효과가 없었습니다.하지만 apt 설치를 통해 라이브러리를 설치한 후 문제가 사라졌습니다.

Python3의 경우

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

Python2의 경우,

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

도움이 되길 바랍니다.

그냥 너의 numpy 모듈을 업그레이드해, 지금은 1.15.4야.창용

pip install numpy --upgrade

아나콘다 환경에 있는 경우 다음을 사용합니다.

conda update --all

또는:

conda update numpy

이 오류는 설치된 패키지가 다른 버전의 numpy에 대해 빌드되었기 때문에 발생합니다.
우리는 스파이시와 스피킷을 재건할 필요가 있습니다. 지역에 대항하여 학습합니다.numpy.

규용신을 pip의 경우 (나의경우경))pip 18.0은 효과가 있었습니다.

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

--no-binary바이너리를 무시할 패키지의 이름 목록을 가져옵니다.이 경우 우리는 통과했습니다.--no-binary scipy,scikit-learn이는 scipy,scikit-learn 패키지에 대한 이진 파일을 무시합니다.이 안 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

메타 정보:sklearn을 설치하는 권장 방법

및 되어 있는 하는 가장 은 numpy "scipy"를 사용하는 입니다.pip

pip install -U scikit-learn 

또는conda:

conda install scikit-learn

[... pip을 사용하여 원본에서 컴파일 안 함]

numpy 및 scipy가 포함된 python 설치가 아직 없는 경우 패키지 관리자 또는 python 번들을 통해 설치하는 것이 좋습니다.이것들은 numpy, sciphy, scikit-learn, matplotlib 및 다른 많은 유용한 과학 및 데이터 처리 라이브러리와 함께 제공됩니다.

cython 0.29 기준으로 소스에서 경고를 제거하는 새로운 check_size 옵션이 있으므로 해당 버전이 다양한 패키지에 침투한 후에는 해결 방법이 필요하지 않습니다.

환경은 Python 2.7.15입니다.

나는 노력한다

pip uninstall
pip install --no-use-wheel

하지만 효과가 없습니다.오류가 표시됩니다.

해당 옵션 없음: --사용하지 않는 휠

그럼 시도해 보겠습니다.

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

그리고 그것은 효과가 있습니다: 쓸모없는 경고는 나타나지 않습니다.

scipy를 가져올 때 다음과 같은 오류 정보가 표시됩니다. RuntimeWarning: builtin.type size가 변경되었으며 이진 비호환성을 나타낼 수 있습니다.예상 zd, got zd

이 문제는 파이썬 버전을 2.7.2에서 2.7.13으로 업데이트하여 해결했습니다.

언급URL : https://stackoverflow.com/questions/40845304/runtimewarning-numpy-dtype-size-changed-may-indicate-binary-incompatibility

반응형