Scikit-learn: فشل t-SNE مع المصفوفة يجب ألا يحتوي على infs أو NaNs (خاص بـ OSX)

تم إنشاؤها على ١٥ أبريل ٢٠١٦  ·  108تعليقات  ·  مصدر: scikit-learn/scikit-learn

Darwin-15.0.0-x86_64-i386-64bit
('Python', '2.7.11 |Anaconda custom (x86_64)| (default, Dec  6 2015, 18:57:58) \n[GCC 4.2.1 (Apple Inc. build 5577)]')
('NumPy', '1.11.0')
('SciPy', '0.17.0')
('Scikit-Learn', '0.17.1')

عند محاولة تشغيل t-SNE

proj = TSNE().fit_transform(X)
ValueError: array must not contain infs or NaNs

ومع ذلك

np.isfinite(X).all() # True 
np.isnan(X).all() # False
np.isinf(X).all() # False

تتبع المكدس الكامل:


ValueError                                Traceback (most recent call last)
<ipython-input-16-c25f35fd042c> in <module>()
----> 1 plot(X, y)

<ipython-input-1-72bdb7124d13> in plot(X, y)
     74 
     75 def plot(X, y):
---> 76     proj = TSNE().fit_transform(X)
     77     scatter(proj, y)

/Users/joelkuiper/anaconda/lib/python2.7/site-packages/sklearn/manifold/t_sne.pyc in fit_transform(self, X, y)
    864             Embedding of the training data in low-dimensional space.
    865         """
--> 866         embedding = self._fit(X)
    867         self.embedding_ = embedding
    868         return self.embedding_

/Users/joelkuiper/anaconda/lib/python2.7/site-packages/sklearn/manifold/t_sne.pyc in _fit(self, X, skip_num_points)
    775                           X_embedded=X_embedded,
    776                           neighbors=neighbors_nn,
--> 777                           skip_num_points=skip_num_points)
    778 
    779     def _tsne(self, P, degrees_of_freedom, n_samples, random_state,

/Users/joelkuiper/anaconda/lib/python2.7/site-packages/sklearn/manifold/t_sne.pyc in _tsne(self, P, degrees_of_freedom, n_samples, random_state, X_embedded, neighbors, skip_num_points)
    830         opt_args['momentum'] = 0.8
    831         opt_args['it'] = it + 1
--> 832         params, error, it = _gradient_descent(obj_func, params, **opt_args)
    833         if self.verbose:
    834             print("[t-SNE] Error after %d iterations with early "

/Users/joelkuiper/anaconda/lib/python2.7/site-packages/sklearn/manifold/t_sne.pyc in _gradient_descent(objective, p0, it, n_iter, objective_error, n_iter_check, n_iter_without_progress, momentum, learning_rate, min_gain, min_grad_norm, min_error_diff, verbose, args, kwargs)
    385     for i in range(it, n_iter):
    386         new_error, grad = objective(p, *args, **kwargs)
--> 387         grad_norm = linalg.norm(grad)
    388 
    389         inc = update * grad >= 0.0

/Users/joelkuiper/anaconda/lib/python2.7/site-packages/scipy/linalg/misc.pyc in norm(a, ord, axis, keepdims)
    127     """
    128     # Differs from numpy only in non-finite handling and the use of blas.
--> 129     a = np.asarray_chkfinite(a)
    130 
    131     # Only use optimized norms if axis and keepdims are not specified.

/Users/joelkuiper/anaconda/lib/python2.7/site-packages/numpy/lib/function_base.pyc in asarray_chkfinite(a, dtype, order)
   1020     if a.dtype.char in typecodes['AllFloat'] and not np.isfinite(a).all():
   1021         raise ValueError(
-> 1022             "array must not contain infs or NaNs")
   1023     return a
   1024 

ValueError: array must not contain infs or NaNs
Bug

التعليق الأكثر فائدة

بالنسبة لأي شخص يتأثر بهذا ، يجب أن يصلح ذلك:

conda remove numpy --force -y
pip uninstall numpy -y
conda install numpy

اسمحوا لي أن أعرف إذا كان هذا لا يعمل من أجلك.

ال 108 كومينتر

نفس الشيء مع ('Scikit-Learn'، '0.18.dev0')

هل تمانع في مشاركة بياناتك X معي؟

بالتأكيد ، أين وبأي شكل تريده؟

في 17 أبريل 2016 ، الساعة 09:11 ، كتب 康 洋[email protected] :

هل تمانع في مشاركة بياناتك X معي؟

-
أنت تتلقى هذا لأنك قمت بتأليف الموضوع.
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو اعرضها على GitHub https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -210968577

بريدي الإلكتروني هو [email protected]
كما أعلم ، هناك دالة numpy.save لحفظ مصفوفة في ملف ثنائي بتنسيق .npy ~~

أختبر بياناتك في Ubuntu 14.04 LTS مع
بايثون == 2.7.6
scikit-learn == 0.17.1
numpy == 1.8.2
scipy == 0.13.3
إنه جيد ولا يرفع "خطأ القيمة". كود الاختبار هو:
`استيراد numpy
a = numpy.load ('/ root / test.npy')
طباعة شكل
طباعة numpy.isnan (أ). all () # False
طباعة numpy.isfinite (أ). all () # صحيح
طباعة numpy.isinf (a) .all () #False

من sklearn.manifold استيراد TSNE
proj = TSNE (). fit_transform (a) # [[2.35503527e + 00 1.15976751e + 01] .... [3.29832591e + 00 8.98212513e + 00]]
طباعة المشروع


ثم أقوم بترقية numpy و scipy إلى 1.11.0 و 0.17.0 واختبر بنفس الكود كما أنه لا يثير أي خطأ.

تم إعادة إنتاجه لـ 3.5 مع أناكوندا تحت OS X El Capitan.

Darwin 15.4.0
Python 3.5.1 :: Anaconda custom (x86_64)
numpy 1.10.4
scipy 0.17.0
scikit-learn 0.17.1

تشغيل مثال:

import random
from sklearn.manifold import TSNE
random.seed(1)
a = np.random.uniform(size=(100,20))
TSNE(n_components=2).fit_transform(a)

شكرًا @ ivan-krukov ، لكني فشلت في النسخ المتماثل في Python 3.3. سيحاول 3.5

هذا لا ينطبق على linux (4.4.0-21 ، Ubuntu 16.04) مع نفس الحزم تحت 3.5.

أنا على El-Capitan ، لكنني أخفق في الحصول على تثبيت Python 3.5 وتشغيله.

هل هناك أي تحديث على ذلك؟

لدي مشكلة في مجموعة بيانات خاصة بي ، في Anaconda و Py 3.5 و sklearn 0.17.1 و OSX El Capitan.
يمكنني إعادة إنتاج الخطأ بالمثال المقدم من @ ivan-krukov.

المشكلة نفسها. Python 2.7.6 في OS X El Capitan على 0.17. جربت نفس الكود على Linux باستخدام Python 2.7.6 و 0.17 ، وهو يعمل.

المشكلة نفسها.
OSX El Capitan Python 3.5.1
scikit-learn == 0.17.1
scipy == 0.17.1

لدي نفس المشكلة وأقدر حقًا إصلاحًا (أو حلًا بديلًا؟)
إصدار النظام: OS X 10.11.5
Python 3.5.1 :: Anaconda 4.0.0 (x86_64)
numpy.version.version 1.11.0
الإصدار 0.17.1 من scipy
sklearn. الإصدار 0.17.1

يمكنني أيضًا إعادة إنتاج الخطأ باستخدام عينة الرمز من ivan-krukov

نفس المشكلة على OS X EI Capitan باستخدام Python 3.5

إصدار النظام: OS X 10.11.5
Python 3.5.1 :: Continuum Analytics، Inc.
حبيبي. الإصدار 1.11.1
scipy. الإصدار 0.16.0
sklearn. الإصدار 0.17.1

نفس المشكلة. على الرغم من أنني لاحظت أنه يحدث فقط لمجموعة فرعية من مجموعة البيانات الخاصة بي وليس مع كل شيء . بمعنى ، إذا قمت بإجراء TSNE على مجموعة البيانات بأكملها ، فإنها تعمل ، إذا قمت بذلك على مجموعة مخفضة فإنها لا تعمل.

O_o ؛؛ هذا فقط ، إذا كررت نفس المجموعة الفرعية "المكسورة" التي لا تعمل (عن طريق القائمة * 10) فإنها تعمل. لا ينجح ضرب كل متجه فردي في 10 ، لكن تكرار التاريخ يعمل. مجرد مضاعفة طول القائمة غير كاف. ربما يكون هذا نوعًا من درجات التحقق من الحرية ،

@ ivan-krukov لقد قمت بتثبيت الرصاصة اليوم وقمت بتثبيت El Capitan VM. لسوء الحظ لا يمكنني إعادة إنتاج مشكلتك.

Concomitant هل يمكنك إعادة إنشاء الخطأ في المثال المستقل الوارد في https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -218365487؟

أنا على El-Capitan ، لكنني أخفق في الحصول على تثبيت Python 3.5 وتشغيله.

jnothman لا يبدو أنه يحدث فقط على Python 3.5 ، لذا إذا كان بإمكانك محاولة إعادة الإنتاج باستخدام Python 2.7 (مقتطف: https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment-218365487 ) هذا سيكون رائع.

@ lesteve يمكنني إعادة إنتاج المشكلة.

import numpy as np
import random
from sklearn.manifold import TSNE
random.seed(1)
a = np.random.uniform(size=(100,20))
TSNE(n_components=2).fit_transform(a)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/dshank/miniconda3/envs/python3/lib/python3.5/site-packages/sklearn/manifold/t_sne.py", line 866, in fit_transform
    embedding = self._fit(X)
  File "/Users/dshank/miniconda3/envs/python3/lib/python3.5/site-packages/sklearn/manifold/t_sne.py", line 777, in _fit
    skip_num_points=skip_num_points)
  File "/Users/dshank/miniconda3/envs/python3/lib/python3.5/site-packages/sklearn/manifold/t_sne.py", line 832, in _tsne
    params, error, it = _gradient_descent(obj_func, params, **opt_args)
  File "/Users/dshank/miniconda3/envs/python3/lib/python3.5/site-packages/sklearn/manifold/t_sne.py", line 387, in _gradient_descent
    grad_norm = linalg.norm(grad)
  File "/Users/dshank/miniconda3/envs/python3/lib/python3.5/site-packages/scipy/linalg/misc.py", line 115, in norm
    a = np.asarray_chkfinite(a)
  File "/Users/dshank/miniconda3/envs/python3/lib/python3.5/site-packages/numpy/lib/function_base.py", line 1033, in asarray_chkfinite
    "array must not contain infs or NaNs")
ValueError: array must not contain infs or NaNs

مع اتباع نفس الكود:

>>> a = np.random.uniform(size=(10000,20))
>>> TSNE(n_components=2).fit_transform(a)
array([[  3.25766047e+11,  -2.74708004e+11],
       [  2.43498802e+11,  -7.68189047e+10],
       [ -6.00107639e+09,  -1.13548763e+11],
       ..., 
       [  3.02794039e+10,   6.64402020e+11],
       [  2.55855781e+10,   5.67932400e+10],
       [  1.42040378e+11,  -7.55188994e+10]])

غريب.

لا يمكنني إعادة الإنتاج باستخدام python 3.5.1 و numpy 1.11.1 و scipy 0.17.1 و scikit-learn 0.17.1 من miniconda (مع MKL) على صندوق افتراضي مع OSX El Capitan. سأحاول على جهاز Mac حقيقي لاحقًا.

وأيضًا joelkuiper و هل يمكنك التحقق من أنه يمكنك إعادة إنتاج المشكلة على الحالة الحالية لفرع scikit-Learn الرئيسي؟

@ lesteve والآخرين لا يمكنني إعادة إنتاج الخطأ باستخدام المقتطف المنشور سابقًا على أحدث نسخة رئيسية مع python 2.7.

معلومات النظام:

Darwin-15.0.0-x86_64-i386-64bit
('Python', '2.7.10 (v2.7.10:15c95b7d81dc, May 23 2015, 09:33:12) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]')
('NumPy', '1.11.0')
('SciPy', '0.17.0')
('Scikit-Learn', '0.18.dev0')

لقد حاولت مرة أخرى على جهاز Mac حقيقي يعمل بنظام OSX El Capitan 10.11.3 (مع أحدث إصدارات أناكوندا scipy و scikit-Learn ، نفس الإعداد الذي أوردته Concomitant في https://github.com/scikit-learn/scikit-learn/issues / 6665 # issuecomment-229703129) ولكن لا يمكن إعادة إنتاج المشكلة أيضًا (حاول تشغيل المقتطف عدة مرات).

الغريب أنه بالرغم من السطر np.random.seed(1) فإنني أحصل على نتائج مختلفة لمخرجات fit_transform . قد يكون هذا خطأ في حد ذاته.

ما هو غريب على الرغم من أنه على الرغم من سطر np.random.seed (1) أحصل على نتائج مختلفة لإخراج fit_transform. قد يكون هذا خطأ في حد ذاته.

في الواقع ، قرأت مقتطف الشفرة الخاص بـ Concomitant بسرعة كبيرة: بدلاً من random.seed(1) يجب أن يكون np.random.seed(1) وإلا لم تتم إعادة تعبئة RNG غير المتراكم بشكل مناسب ولا يمكن للمرء الحصول على نتائج حتمية.

أدركت الآن أيضًا أنني قرأت المناقشة بأكملها بسرعة كبيرة وأن الخطأ يحدث فقط مع python 2.7. سأحاول مرة أخرى.

لا يمكنني التكاثر مع python 2.7.12 من conda على OSX 10.11.3 أيضًا.

في الواقع ، يمكن لـ Ekliptor إعادة إنتاج المشكلة مع python 3.5.1 من conda ، لذلك ربما لا يتعلق الأمر بإصدار Python أيضًا. ربما يعتمد ذلك على الإصدار الثانوي من OSX. سيتم الترقية وإعادة المحاولة.

لا يمكنني النسخ المتماثل مع OSX 10.11.5. لقد جربت كلاً من Python 2.7.12 و 3.5.2 المثبتين مع conda جنبًا إلى جنب مع numpy 1.11.1 و scipy 0.17.1 و scikit-learn 0.17.1.

أنا لا أعرف ما يجب القيام به. إذا كان أحدكم قادرًا على إعادة إنتاج المشكلة ، فالرجاء محاولة العثور على بذرة عشوائية عشوائية تؤدي إلى حدوث المشكلة (باستخدام np.random.seed(my_seed) بدلاً من random.seed(1) في المقتطف أعلاه) وتوصيل القيمة هنا (جنبًا إلى جنب مع إصدار OSX وأنت حزم python).

يمكنني أن أؤكد أن المشكلة قد تم إصلاحها باستخدام أحدث إصدار. لا يمكنني إعادة إنتاجه كما كان من قبل.
لقد قمت بتحديث numpy فقط:
numpy.version.version 1.11.1

إلى جميع الأشخاص الذين يعملون مع Tensorflow يمكنني إضافة:
عندما أحاول رسم عينة صغيرة جدًا (<200 نقطة) ما زلت أواجه هذا الخطأ أحيانًا. بعد زيادة حجم العينة قمت بالمرور إلى tsne.fit_transform () فإنه يعمل دائمًا.

شكرًا Ekliptor للتحقق من أنه يعمل مع برنامج scikit-Learn Master. joelkuiper و Concomitant هل تؤكد أن برنامج scikit-Learn الرئيسي يعمل أيضًا من أجلك؟ إذا كان الأمر كذلك يمكننا إغلاق هذه المشكلة.

لقد قمت بتثبيت سيد ، مقتطف الشفرة يعمل بشكل نظيف الآن.

يبدو أنه يعمل للجميع الآن. إغلاق.

عذرًا ، لكني ما زلت أحصل على هذا على Python 3.5.1 و scikit 0.17 و scikit-learn 0.18 (الالتزام 9e913c04d748) و Numpy 1.11.1 على نظام التشغيل Mac OS 10.11.5.

dmyersturnbull هل تحصل على الخطأ عند تشغيل المقتطف من https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -218365487؟

@ lesteve فعلته مع ذلك المقتطف الدقيق ، نعم. ومع ذلك ، لم أعد أحصل عليه بعد مسح تثبيت Anaconda وإعادة تثبيته من البداية باستخدام Python 3.5.2.

لدي نفس المشكلة مع Python 3.5.2 ، scikit-Learn 0.17.1 ، scipy 0.17.1 ، numpy 1.11.1 على Mac OS X El Capitan 10.11.3. إنه يعمل عندما يكون لدي أكثر من 2100 نقطة ولكنه يفشل في الحصول على قيم أقل.

لدي نفس المشكلة مع Python 3.5.2 ، scikit-Learn 0.17.1 ، scipy 0.17.1 ، numpy 1.11.1 على Mac OS X El Capitan 10.11.3. إنه يعمل عندما يكون لدي أكثر من 2100 نقطة ولكنه يفشل في الحصول على قيم أقل.

فشل بشكل مماثل

أعد الفتح من فضلك

أواجه نفس المشكلة في OS X 10.11.6 و python 3.5.1 و sklearn 0.17.1 و numpy 1.11.1.
في مجموعة البيانات هذه: https://dl.dropboxusercontent.com/u/103591/vals.out (مع np.savetxt)

فشل بشكل مماثل لقيم النقاط المنخفضة

@ Lucidyan لا أفهم ما تعنيه بذلك.

أواجه نفس المشكلة في OS X 10.11.6 و python 3.5.1 و sklearn 0.17.1 و numpy 1.11.1.
في مجموعة البيانات هذه: https://dl.dropboxusercontent.com/u/103591/vals.out (مع np.savetxt)

pbnsilva هل يمكنك تجربة هذا المقتطف المنشور أدناه؟ قد تحتاج إلى تشغيله عدة مرات لأنه للأسف لم يتم تعيين البذور بشكل مناسب (تحتاج إلى استخدام np.random.seed بدلاً من random.seed ).

import random
from sklearn.manifold import TSNE
random.seed(1)
a = np.random.uniform(size=(100,20))
TSNE(n_components=2).fit_transform(a)

نقاط المكافأة إذا كان بإمكانك العثور على وسيطة أولية لـ np.random.seed ووسيطة random_state إلى TSNE تجعل المقتطف حتميًا.

بدلاً من ذلك ، أفاد بعض الأشخاص أنه تم إصلاح هذا الخطأ الرئيسي. هل يمكنك محاولة بناء برنامج ماجستير scikit-Learn لمعرفة ما إذا كانت المشكلة تختفي؟

lesteve قصدت أنني حصلت على نفس الخطأ مع عدد قليل من المثيلات ، مع نفس معلمات النظام (Python 3.5.2 ، scikit-Learn 0.17.1 ، scipy 0.17.1 ، numpy 1.11.1 على Mac OS X El Capitan 10.11.3)

pbnsilva هل يمكنك تجربة هذا المقتطف المنشور أدناه؟ قد تحتاج إلى تشغيله عدة مرات لأنه للأسف لم يتم تعيين البذور بشكل مناسب (تحتاج إلى استخدام np.random.seed بدلاً من random.seed).

لقد جربته وفشلت مع X_SIZE <= 1750 (Y_SIZE = 20 ، n_components = 2 أصبحت ثوابت). إذا بدأت في تغيير الثوابت (الزيادة) مع X_SIZE الثابت = 1750 ، فإنه يفشل أيضًا.

Lucidyan هل يمكنك تجربة نفس المقتطف مع scikit-Learn master ومعرفة ما إذا كان قد فشل أيضًا؟

نعم لا تعمل لدي (numpy 1.11.1 ، El capitan.10.11 ، sklearn 0.17.1 ، python 3.5.2) بشكل مزعج أنه كسر الكود القديم الذي كان يعمل. ماذا تغيرتم يا رفاق ...؟

@ act65 ، نحن حريصون جدًا على الوصول إلى الجزء السفلي من هذا ولكننا لم نتمكن من إعادة الإنتاج ويبدو أننا نتلقى تقارير مختلطة من المستخدمين حتى الآن للأسف.

لذا ، إذا لم تكن قد فعلت ذلك بالفعل (للأسف ، نحن لا نمانع القراء ولا تخبرنا عبارة "لا نعمل لدي" بما جربته) ، هل يمكنك محاولة تشغيل المقتطف المذكور أعلاه في https://github.com/scikit-learn / scikit-learn / issues / 6665 # issuecomment -243782185. حاول تشغيله عدة مرات فقط في حالة عدم تعيين البذور العشوائية بشكل صحيح وقد يكون هناك بعض العشوائية المتبقية في المقتطف.

ثم ما الذي سيكون رائعًا حقًا إذا كان بإمكانك تجربة الإصدار 0.18 المرشح الذي يكون سهل التثبيت (موصى به بشدة للقيام بذلك في Virtualenv أو conda env منفصل):

pip install --pre scikit-learn -U

تم تحريره: تم إصدار 0.18 لذا يمكنك فقط استخدام (لا حاجة لاستخدام --pre ):

pip install scikit-learn -U

وأعد تشغيل المقتطف لمعرفة ما إذا كان قد تم إصلاحه في 0.18 كما أبلغ بعض المستخدمين في هذا الموضوع بالفعل.

سيتم إصدار 0.18 في غضون أسابيع قليلة إن لم يكن أيام حتى تعرف ما عليك القيام به إذا كنت تريد مساعدتنا في الوصول إلى الجزء السفلي من هذا قبل الإصدار ؛-).

نعم سيئي ، كان يجب أن يكون أوضح. (لقد جربت نفس الشيء تقريبًا الذي جربه الآخرون ، فقط على MNIST).

على أي حال ، إنه يعمل! شكر :)
pip install --pre scikit-learn -U أصلحه

حسنًا ، شكرًا لك على الإبلاغ ، ومن الرائع أن نسمع أن هذا تم إصلاحه لك في الإصدار 0.18 المرشح! يبدو أن هذا يتطابق مع ما أبلغ عنه الآخرون عندما يقولون إنه تم إصلاحه في الإصدار الرئيسي.

فقط من أجل الاكتمال ، يوصى بالالتزام بالإصدارات التي تم إصدارها لرمز الإنتاج ، لذلك قد تحتاج إلى الانتظار قليلاً حتى يتم إصدار 0.18.

تضمين التغريدة
جربت المقتطف على الإصدار 0.18rc2 ، المثبت بواسطة

تثبيت نقطة - قبل scikit-learn -U

ويبدو أنه يعمل! في صحتك!

شكرا @ Lucidyan لتجربتها.

عذرًا ، ما زلت أتلقى هذا الخطأ مع مقتطف الشفرة أعلاه بعد الترقية إلى scikit-learn 0.18 ( pip install --pre scikit-learn -U ) في conda env.

هنا معلومات نظامي:
OS X El Capitan الإصدار 10.11.4
بايثون 2.7.12
sklearn 0.18 (حصلت على نفس الخطأ في sklearn 0.17.1 كذلك)
numpy 1.11.1 (حصلت على نفس الخطأ في numpy 1.11.2 أيضًا)
scipy 0.18.1.0 تحديث

ومع ذلك ، قمت بتشغيل نفس مقتطف الشفرة على نظام Linux ، ولم أحصل على خطأ.
معلومات نظام نظام Linux هي:
نظام التشغيل Ubuntu 14.04.5 LTS (GNU / Linux 3.13.0-91-generic x86_64)
بايثون 2.7.6
sklearn 0.18.0 تحديث
numpy 1.11.2
scipy 0.13.3.0 تحديث

حاول إلغاء تثبيت وإعادة تثبيت numpy و scipy و scikit-learn. إذا استمر فشل ذلك ، فحاول استخدام بيئة افتراضية مختلفة (أو بيئة conda إذا كنت تستخدم conda) للتأكد من وجود خطأ ما في بيئة Python الخاصة بك.

لا يزال يظهر نفس الخطأ ( ValueError: array must not contain infs or NaNs ) في sklearn 0.18 ( 0.18-np111py35_0 ) عبر conda. يبدو أن عجلات الأنابيب تعمل بشكل جيد!

لا يزال هناك نفس الخطأ (ValueError: المصفوفة يجب ألا تحتوي على infs أو NaNs) في sklearn 0.18 (0.18-np111py35_0) عبر conda. يبدو أن عجلات الأنابيب تعمل بشكل جيد!

هممم مثير للاهتمام ... هل يمكنك تجربة استخدام حزم conda بدون mkl ، أي شيء مثل conda create -n sklearn_nomkl python scikit-learn nomkl حتى نتمكن من معرفة ما إذا كان هذا هو أمر MKL مقابل openblas؟

أيضًا نقاط المكافأة إذا كان بإمكانك تقديم مقتطف يعيد إنتاج المشكلة باستخدام أصل عشوائي ثابت (أي باستخدام np.random.RandomState(some_int) ) يمكن استخدامه كمقتطف مرجعي من الآن فصاعدًا. حتى الآن ، المقتطف الذي لدينا غير محدد (يتم استخدام random.seed وليس له تأثير numpy.random seed).

بالتأكيد لا مشكلة. قد تكون هذه مشكلة BLAS بالفعل ، فإن env conda create -n sklearn_nomkl python scikit-learn nomkl يعمل بشكل جيد.

بخصوص المقتطف ... هذا مثير للاهتمام. على سبيل المثال ،

from sklearn.manifold import TSNE
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits

digits = load_digits()

X_train, X_test, y_train, y_test = train_test_split(digits.data, 
                                                    digits.target, 
                                                    random_state=1)

tsne = TSNE(random_state=1)
digits_tsne_train = tsne.fit_transform(X_train)

إعادة إنتاج المشكلة على جهازي. ومع ذلك ، عندما أستبدل digits_tsne_train = tsne.fit_transform(X_train) بـ digits_tsne_train = tsne.fit_transform(digits.data) يبدو الأمر على ما يرام. سيكون من الجيد العثور على مثال خفيف الوزن ربما لإضافة هذه الحالة بالذات إلى اختبارات ترافيس.

تحرير: نفس الشيء ينطبق على القزحية. iris.data في fit_transform ، بينما لا تعمل مجموعة البيانات المقسمة ( X_train ). ربما هناك شيء مضحك يحدث في train_test_split . ومع ذلك ، يبدو أن كلا من X_train و iris.data عائم 64 مصفوفة ...

ماذا عن المقتطف من https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -243782185 ، لم تجد طريقة لجعله حتميًا وما زلت تفشل على جهازك؟

المقتطف

import numpy as np
from sklearn.manifold import TSNE

np.random.seed(1)

a = np.random.uniform(size=(100, 20))
TSNE(n_components=2, random_state=1).fit_transform(a)

يعيد إنتاج الخطأ (لكنه يعمل بشكل جيد على Nomkl env)

حسنًا ، شكرًا جزيلاً على هذا ، على الأقل لدينا مقتطف محدد الآن. للتسجيل ، يمكنك نشر ناتج هذا المقتطف:

import platform; print(platform.platform())
import sys; print("Python", sys.version)
import numpy; print("NumPy", numpy.__version__)
import scipy; print("SciPy", scipy.__version__)
import sklearn; print("Scikit-Learn", sklearn.__version__)

أيضًا ، فقط من أجل السلامة العقلية ، هل يمكنك التأكد من أنه يمكنك إعادة إنتاج المشكلة في بيئة كوندا جديدة.

لأكون صادقًا ، لست متأكدًا من أين نذهب من هذا. لم أحاول منذ ذلك الحين ولكني لم أتمكن من إعادة الإنتاج على صندوق El Capital الظاهري ، لم يتمكن ogrisel من التكاثر أيضًا على كمبيوتر محمول OSX ، لذلك في الوقت الذي قال فيه أنه قد تكون هناك بعض المشاكل الخاصة بالأجهزة.

بالتأكيد ،

الجهاز الذي يسبب هذه المشكلة:

Darwin-16.1.0-x86_64-i386-64bit
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:52:12) 
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)]
NumPy 1.11.2
SciPy 0.18.1
Scikit-Learn 0.18

(جربته في بيئة كوندا جديدة)

قد يكون هناك بعض المشاكل المتعلقة بالأجهزة.

أعتقد أنك قد تكون على شيء! لقد جربته على جهاز Mac الآخر ، وهو يعمل بشكل جيد هناك. الاختلاف الوحيد هو أن المخرجات أعلاه تعمل على نواة أقدم ( Darwin-15.6.0-x86_64-i386-64bit ). لم تقم بتحديث نظام mac الثاني إلى macOS Sierra حتى الآن ، والذي يعمل على الجهاز السابق الذي يعاني من هذه المشكلة. يمكن أن يكون مرتبطًا بنظام التشغيل. سأقوم بترقية الجهاز الثاني إلى Sierra في الشهر المقبل أو نحو ذلك (أنا في منتصف مشروع ولا أريد كسر الأشياء) ، لكن يمكنني إخبارك إذا كان التحديث إلى Sierra يؤدي إلى هذه المشكلة على الجهاز الثاني (أو ربما يمكن لشخص آخر لديه نظام macOS Sierra اختباره حتى نتمكن الآن من اختباره إذا كان نظام تشغيل)

نظرًا لأنه تم الإبلاغ عن المشكلة في إصدارات OSX المختلفة ، فأنا أشك في أن هذه ليست سوى مشكلة إصدار OSX. كان حدس IIRCogrisel هو أنه يتعلق ببنية وحدة المعالجة المركزية.

هناك طريقة أخرى (تستغرق وقتًا أطول) لتصحيح هذه المشكلة وهي تتبع مكان ظهور NaNs في الكود.

كان حدس IIRCogrisel هو أنه يتعلق ببنية وحدة المعالجة المركزية.

حسنًا ، كيف ستختلف نسخة conda scikit-Learn عن عجلات البيب؟ لأن الأخير يبدو أنه يعمل على نفس الجهاز. ربما يتعلق الأمر بطريقة ما بـ conda

هناك طريقة أخرى (تستغرق وقتًا أطول) لتصحيح هذه المشكلة وهي تتبع مكان ظهور NaNs في الكود.

لقد لاحظت أن التدرج اللوني في https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/manifold/t_sne.py#L387 ينفجر ، حتى يصبح -inf في موضع واحد بعد التكرار الخامس والعشرون في https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/manifold/t_sne.py#L386 for-loop

...
   0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
   0.00000000e+00   0.00000000e+00   6.06587795e+32  -1.10699515e+33
  -1.55245133e+34              inf  -1.52569936e+33  -3.43926080e+33
  -1.92332051e+32  -2.73996151e+32  -2.57570880e+33  -3.64962271e+33
...

على الجهاز الآخر (الجهاز الذي يعمل بشكل جيد) ، تكون جميع التدرجات <0 بعد نفس التكرار. لذلك ، بطريقة ما لا تعمل وظيفة _gradient_descent بشكل صحيح (ربما بسبب بعض عناصر BLAS).

حسنًا ، كيف ستختلف نسخة conda scikit-Learn عن عجلات البيب؟ لأن الأخير يبدو أنه يعمل على نفس الجهاز. ربما يتعلق الأمر بطريقة ما بـ conda

تستخدم عجلات النقطة OpenBLAS ولا تواجهك مشكلة عند استخدام OpenBLAS مع conda (من خلال خدعة nomkl ) لذلك يبدو هذا وكأنه مشكلة MKL ، والتي من المحتمل أن تكون خاصة بوحدة المعالجة المركزية.

بالمناسبة ، عمل رائع لتصحيح المشكلة! نقاط المكافأة إذا تمكنت من عزل المشكلة بشكل أكبر (على سبيل المثال عن طريق انتقاء البيانات قبل ظهور التكرار inf ). تظهر المشكلة على الأرجح في بعض رموز cython في sklearn / manifold / _barnes_hut_tsne.pyx.

ألا ينبغي إعادة فتح هذه القضية في ضوء آخر النتائج؟ لقد ضربتها أيضًا وتمكنت أيضًا من تجاوزها باستخدام خدعة nomkl ، لكنني أشعر وكأنها حشرة نشطة مقابل واحدة مغلقة ، أليس كذلك؟

الآخرين الذين تم ضرب هذا: https://discussions.udacity.com/t/assignment-5-error-in-the-main-code-valueerror-array-must-not-contain-infs-or-nans/178187 / 7

أنت على حق ، إعادة الافتتاح. هذا واحد خطير ، ويبدو أنه خاص بالأجهزة ولا يمكن لأي من المطورين الأساسيين إعادة إنتاجه. الطريقة الوحيدة لإصلاح ذلك هي إذا استثمر الأشخاص الذين يواجهون المشكلة بعض الوقت في تصحيح المشكلة بشكل أكبر.

بالمناسبة ، عمل رائع لتصحيح المشكلة! نقاط المكافأة إذا تمكنت من عزل المشكلة بشكل أكبر (على سبيل المثال عن طريق انتقاء البيانات قبل ظهور ملف inf التكرار). تظهر المشكلة على الأرجح في بعض رموز cython في sklearn / manifold / _barnes_hut_tsne.pyx.

يسعدني النظر في الأمر بمزيد من التفصيل في ديسمبر بعد كل المواعيد النهائية لشهر نوفمبر ... ومع ذلك ، حتى هذا يمكن عزله بشكل أكبر ، فأنا أشعر بالفضول لمعرفة ما إذا كان هناك حل لهذه المشكلة الخاصة بالأجهزة. ربما ، حتى يتم حل هذا الأمر بالكامل ، قد يكون من المفيد رفع استثناء / تحذير أكثر تحديدًا إذا كان التدرج يحتوي على infs مع ملاحظة حول هذه المشكلة؟

لقد أنشأت للتو conda virtualenv جديدًا وأنشأت نسخة مطورة من sklearn من الكود المصدري المتشعب حديثًا من الفرع الرئيسي sciki-Learn ، اختفى الخطأ. هل تم إنشاء devp sklearn من شفرة المصدر باستخدام OpenBLAS بدلاً من MKL؟

يسعدني النظر في الأمر بمزيد من التفصيل في ديسمبر بعد كل المواعيد النهائية لشهر نوفمبر ...

يبدو رائعا ، شكرا جزيلا!

ومع ذلك ، حتى هذا يمكن عزله بشكل أكبر ، فأنا أشعر بالفضول إذا كان هناك حل لمشكلة خاصة بالأجهزة.

لست متأكدًا من الإصلاح ، نأمل أن نتمكن من تغيير كود cython الخاص بنا لحل المشكلة بمجرد عزلها. كما يمكن أن تكون مشكلة openblas وسيكون ذلك أمرًا رائعًا للإبلاغ عنه ، خاصة وأن العجلات تستخدم openblas.

ربما ، حتى يتم حل هذا الأمر بالكامل ، قد يكون من المفيد رفع استثناء / تحذير أكثر تحديدًا إذا كان التدرج يحتوي على infs مع ملاحظة حول هذه المشكلة؟

تبدو إضافة بعض النصائح إلى رسالة الخطأ (فقط على OS X) فكرة جيدة ، لكنني لست متأكدًا مما يجب أن تقوله ، ربما "فكر في استخدام conda وتثبيت scikit-learn مع MKL" أو شيء من هذا القبيل.

هل تم إنشاء devp sklearn من شفرة المصدر باستخدام OpenBLAS بدلاً من MKL؟

zhongyuk يعتمد على المكتبة التي قمت بتثبيتها. تتمثل إحدى طرق المعرفة بمجرد إنشاء scikit-Learn من المصدر في تشغيل ما يعادل ldd (يبدو أن Google تقول otool -L ) على sklearn/cluster/_k_means.so (سيكون الاسم مختلفًا إذا أنت تستخدم Python 3 ، أي شيء مثل sklearn/cluster/_k_means.cpython-35m-x86_64-linux-gnu.so ). على جهاز Ubuntu الخاص بي على سبيل المثال ، أحصل على هذا:

sklearn/cluster/_k_means.so:
        linux-vdso.so.1 =>  (0x00007ffc2312a000)
        libmkl_intel_lp64.so => /home/lesteve/miniconda3/envs/py27/lib/libmkl_intel_lp64.so (0x00007fadc2865000)
        libmkl_intel_thread.so => /home/lesteve/miniconda3/envs/py27/lib/libmkl_intel_thread.so (0x00007fadc0ee4000)
        libmkl_core.so => /home/lesteve/miniconda3/envs/py27/lib/libmkl_core.so (0x00007fadbf483000)
        libiomp5.so => /home/lesteve/miniconda3/envs/py27/lib/libiomp5.so (0x00007fadbf139000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fadbeeeb000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fadbebe1000)
        libpython2.7.so.1.0 => /home/lesteve/miniconda3/envs/py27/lib/libpython2.7.so.1.0 (0x00007fadbe7fa000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fadbe431000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fadbe22c000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fadbe016000)
        /lib64/ld-linux-x86-64.so.2 (0x0000563bdeda1000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fadbde12000)

لذلك يمكنك أن ترى من السطر الثالث ، أنه يستخدم MKL.

لكني لست متأكدًا مما يجب أن يقوله ، ربما "فكر في استخدام conda وتثبيت scikit-learn مع MKL" أو شيء من هذا القبيل.

أردت فقط أن أكتب أنني أعتقد أنك قد انقلبت: لقد نجحت العجلات في العثور وحدثت المشكلة فقط عندما كنت أستخدمها عبر conda مع MKL ... الآن ، أعتقد أن لدي أخبارًا جيدة بطريقة ما: أردت فقط أعد تشغيل المثال أعلاه الذي تسبب سابقًا في تأكيد هذه المشكلة

import numpy as np
from sklearn.manifold import TSNE

np.random.seed(1)

a = np.random.uniform(size=(100, 20))
TSNE(n_components=2, random_state=1).fit_transform(a)

ولم أعد أتلقى هذه المشكلة. أتذكر أنني أعدت تثبيت miniconda الأسبوع الماضي بسبب بعض المشاكل الأخرى. هل تعتقد أنه يمكن أن يكون مرتبطًا ببعض القضايا في الكوندا القديم؟ سيكون رائعًا إذا كان بإمكان بعض الأشخاص الآخرين الذين لديهم هذه المشكلة محاولة تحديث / إعادة تثبيت conda والتحقق مما إذا كان ذلك يحل المشكلة بالنسبة لهم. وفي الوقت نفسه ، سأحاول معرفة ما إذا كان بإمكاني العثور على حالة احتياطية قديمة لمعرفة إصدار conda الذي قمت بتثبيته مسبقًا. (الآن ، لدي conda 4.2.12)

أريد فقط أن أقول إنني قمت بتشغيل otool -L على sklearn/manifold/_barnes_hut_tsne.so (أفترض أن هذا هو الملف المترجم t_sne.py؟) ، يبدو أنه بالفعل يستخدم BLAS. والشخص الذي ألقى بالخطأ يبدو أنه يستخدم MKL ..

إصدار conda الذي أملكه هو 4.2.13 ، كل من env الذي يرمي الخطأ و env مع sklearn مبني بالمصدر (الذي لا يرمي خطأ) موجودان داخل conda.

حسنًا ، مثير للاهتمام ، لذا فهي ليست مشكلة كوندا بعد كل ذلك ... من الغريب لماذا تعمل بالنسبة لي الآن: /
(كل ما يمكنني أن أعتقد أنه قد تغير (باستثناء إعادة تثبيت conda) هو إعادة التشغيل: P)

أردت فقط أن أكتب أنني أعتقد أنك قد انقلبت: لقد نجحت العجلات في العثور على المشكلة وحدثت فقط عندما كنت أستخدمها عبر conda مع MKL

نعم ، آسف لذلك. سأقوم بتحرير عنوان المشكلة لمحاولة تذكره بشكل صحيح في المرة القادمة.

حسنًا ، مثير للاهتمام ، لذا فهي ليست مشكلة كوندا بعد كل ذلك ... من الغريب لماذا تعمل بالنسبة لي الآن: /
(كل ما يمكنني أن أعتقد أنه قد تغير (باستثناء إعادة تثبيت conda) هو إعادة التشغيل: P)

حسنًا ، تخمين عشوائي ربما نسخة mkl ، على الرغم من أنني إذا كنت أعتقد أن إخراج conda info mkl فإن أحدث إصدار mkl (11.3.3) هو من 2016-05-13.

zhongyuk حاول بناء scikit-Learn داخل بيئة conda تستخدم mkl ، أعتقد أن هذا يجب أن يكون كافيًا لالتقاط mkl (ربما تكون فكرة جيدة في هذه الحالة أن تفعل make clean ثم make in لإعادة البناء من الصفر).

@ lesteve لقد قمت ببناء scikit-Learn في بيئتين ظاهريتين conda من الكود المصدري (إصدار الفرع 0.18) ، أحدهما يستخدم MKL يرمي الخطأ بالفعل ؛ واحد يستخدم libBLAS لا يرمي الخطأ.

الناتج الذي يعمل otool -L على sklearn/manifold/_barnes_hut_tsne.so هنا (في حال كان إصدار MKL يعطيك أي دليل؟)

"" @ rpath/libmkl_intel_lp64.dylib (إصدار التوافق 0.0.0 ، الإصدار الحالي 0.0.0)
@ rpath / libmkl_intel_thread.dylib (إصدار التوافق 0.0.0 ، الإصدار الحالي 0.0.0)
@ rpath / libmkl_core.dylib (إصدار التوافق 0.0.0 ، الإصدار الحالي 0.0.0)
@ rpath / libiomp5.dylib (إصدار التوافق 5.0.0 ، الإصدار الحالي 5.0.0)
/usr/lib/libSystem.B.dylib (إصدار التوافق 1.0.0 ، الإصدار الحالي 1226.10.1)

zhongyuk عظيم! للتأكد من اكتمالها ، هل يمكنك نشر ناتج conda list '(mkl|cython|numpy|scipy)$' (في بيئة MKL conda الخاصة بك)؟ أثناء وجودنا فيه ، ستكون معلومات وحدة المعالجة المركزية ( sysctl -n machdep.cpu.brand_string وفقًا لـ Google) ومعلومات النظام الأساسي ( python -c 'import platform; print(platform.platform())' ) رائعة.

ما سيكون رائعًا حقًا هو الاستمرار في المكان الذي توقف فيه rabst وعزل المشكلة بشكل أكبر:
https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -258311980

نظرًا لأن هذا مرتبط بـ BLAS ، فإن حدسي هو أن هناك خطأ ما في هذا الخط مما يتسبب في أن يكون للتدرج بعض القيم غير المحدودة.

lesteve إخراج معلومات بيئة

Cython                    0.25.1                    <pip>
mkl                       11.3.3                        0  
numpy                     1.11.1                    <pip>
numpy                     1.11.1                   py27_0 
scipy                     0.18.1              np111py27_0 

معلومات وحدة المعالجة المركزية: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
معلومات النظام الأساسي: Darwin-15.4.0-x86_64-i386-64bit

سأبحث في مشكلة انفجار التدرج التي والسطر الذي دائم بأي نتائج مثيرة للاهتمام.

zhongyuk إذا كان ذلك

rasbt hmm ، أتساءل عما إذا كانت المشكلة قد

zhongyuk Hm ، أعتقد أنه من غير المحتمل أن يكون مرتبطًا. قبل إعادة تثبيت miniconda ، واجهت أيضًا مشكلة في macOS Sierra. ملاحظة: يعمل Tensorflow بشكل جيد بالنسبة لي على Sierra ، لكنني أقوم فقط بوحدة المعالجة المركزية والنماذج الأولية على أجهزة Mac الخاصة بي لذلك لا أعرف عن مشكلات GPU المتعلقة بـ Sierra

rasbt hmm ، من الجيد معرفة أن TF يعمل بشكل جيد في Sierra. هل تريد تشغيل otool -L على ملف sklearn/manifold/_barnes_hut_tsne.so في النظام الأساسي الخاص بك لمعرفة مكتبة الرياضيات التي يتعلم استخدامها تحتها؟ بهذه الطريقة على الأقل ، قد نعرف ما إذا كانت المشكلة قد اختفت بعد أن ترتبط إعادة تثبيت miniconda بشكل أساسي بمكتبة الرياضيات؟

سأحصل على التالي على _barnes_hut_tsne.cpython-35m-darwin.so :

    @rpath/libmkl_intel_lp64.dylib (compatibility version 0.0.0, current version 0.0.0)
    @rpath/libmkl_intel_thread.dylib (compatibility version 0.0.0, current version 0.0.0)
    @rpath/libmkl_core.dylib (compatibility version 0.0.0, current version 0.0.0)
    @rpath/libiomp5.dylib (compatibility version 5.0.0, current version 5.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

rasbt هممم ، هذا مثير حقًا. إنها تستخدم MKL أيضًا. لا أعرف ما يكفي عن مكتبة الرياضيات لأتوقع ماذا يعني هذا ... ربما سيكون

لاحظت أنه في منصتي لم يتم تحميل libmkl_intel_lp64.dylib ... هل من الممكن أن يكون سبب المشكلة؟

رائع ، نعم! هو سبب عدم تحميل libmkl_intel_lp64.dylib !!! لقد وجدت هذا الموضوع في تجاوز المكدس ثم قمت بتشغيل conda install --debug mkl ، ثم قمت بتشغيل otool -L على ملف sklearn/manifold/_barnes_hut_tsne.so ، ثم تحميل libmkl_intel_lp64.dylib ، وتشغيل مقتطف الشفرة ذهب الخطأ بعيدا! لديك خمسة فريق عمل! تضمين التغريدة

إذا كان بإمكان أي شخص آخر التحقق من نظامه الأساسي ومعرفة ما إذا كان الخطأ قد اختفى بعد التأكد من تحميل libmkl_intel_lp64.dylib ، فسيكون ذلك رائعًا!

@ lesteve نظرًا لأنه يبدو أن الكثير من الأشخاص قد

zhongyuk رائع ، سعيد لسماع أنك تمكنت من تضييق libmkl_intel_lp64.dylib - سيكون ذلك رائعًا (من حيث معرفة ما يحدث) :). هذا من شأنه أن يفسر أيضًا سبب نجاحه بالنسبة لي الآن بعد إعادة تثبيت Miniconda ... سيكون رائعًا إذا كان بإمكان شخص آخر تجربة "الإصلاح".

إذا تسبب libmkl_intel_lp64.dylib المذكور أعلاه في حدوث هذه المشكلة بالفعل ، فسيكون السؤال المتبقي هو كيفية التعامل مع ذلك في scikit-Learn. أعني ، هذا "الخطأ" هو نوع من البشاعة وقد يكون من الصعب بعض الشيء على الناس اكتشاف أنه بسبب libmkl_intel_lp64.dylib . ربما لن أقوم بإدخال "إذا كان التدرج اللوني يحتوي على خطأ رفع inf + رسالة" في الكود في scikit-Learn لأنه قد يكون مزعجًا للغاية من حيث الأداء ومع ذلك ، أعتقد أن إضافة ملاحظة أو تعليق في التثبيت و / أو مستندات T-SNE ستكون فكرة جيدة.

أريد فقط إضافة تحديث سريع: كان لديّ 2 envs افتراضيان في conda كلاهما يستخدم MKL. أحدهما مجهز بـ numpy 1.11.1 والآخر مجهز بـ numpy 1.11.2 . يشير تشغيل otool -L إلى أن كلاهما بطريقة ما لم يتم تحميل libmkl_intel_lp64.dylib . بعد التأكد من تحميل libmkl_intel_lp64.dylib ، اختفى الخطأ في البيئة الافتراضية بـ numpy 1.11.2 . ومع ذلك ، ظل الخطأ يظهر في البيئة المحيطة بـ numpy 1.11.1 . بعد ترقية numpy إلى 1.11.2 ، لم يعد بإمكاني إعادة إنتاج الخطأ في أي من بيئة conda الظاهرية. نظرًا لأن الأمر يبدو معقدًا ولا يزال السبب الدقيق للخطأ غامضًا ، فأنا أتوقع أنه من المحتمل أن يكون تعقيدًا متشابكًا بسبب تحميل مكتبة MKL غير المكتمل والمكتبات المعتمدة على scikit-Learn (ربما تكون غامضة؟). (على الرغم من أنني لم أحاول إنشاء Virtualenv باستخدام MKL و numpy 1.11.1 لمعرفة ما إذا كان هذا سيؤدي إلى إعادة إنشاء الخطأ.)

وأثني على اقتراح

zhongyuk سعيد لأنك

هذا خطأ كوندا ، أليس كذلك؟ أو هل اختبر أي شخص الخطأ الذي لا يستخدم كوندا؟

تمكنت من العثور على طريقة لإعادة الإنتاج على ما أعتقد عن طريق تثبيت العجلة الصغيرة ثم scikit-learn عبر conda فوقها (حصلت على تلميح من الناتج conda list في https://github.com/scikit- learn / scikit-learn / issues / 6665 # issuecomment-262800762 حيث يوجد اثنان numpy مدرجين).

conda create -n tmp python=3 -y
. activate tmp
pip install numpy -y
conda install scikit-learn -y

ثم قم بتنفيذ المقتطف من https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -262800762.

لذلك يبدو أن هذا يحدث عند خلط numpy مثبت عبر pip و conda. في كتابي ، هذه ليست فكرة جيدة أبدًا لخلط pip و conda لحزمة معينة ولكن أعتقد أن هذا يمكن أن يحدث دون إدراك ذلك بسهولة تامة (على سبيل المثال ، تقوم بتثبيت مشروع يعتمد على numpy via pip ، ثم scikit-learn عبر conda ).

لماذا يحدث هذا بالضبط لا أعرف ... ويبدو أنه يحدث فقط على OSX بالمناسبة (أي ليس على صندوق Ubuntu الخاص بي).

بالنسبة لأي شخص يتأثر بهذا ، يجب أن يصلح ذلك:

conda remove numpy --force -y
pip uninstall numpy -y
conda install numpy

اسمحوا لي أن أعرف إذا كان هذا لا يعمل من أجلك.

شكرًا على الغوص العميق (مرة أخرى!) @ lesteve

اعتقدت أننا لن نصل إلى الجزء السفلي من هذا الأمر لنكون صادقين :)! حسنًا ، إنه ليس الجزء السفلي تمامًا ولكنه منخفض بما يكفي بقدر ما أشعر بالقلق.

يجب أن أعترف أنني ما زلت أرغب في فهم ما يحدث داخل numpy المثبت مع كل من pip و conda ...

مرحبا
حاولت اثنين من الاجهزة ، حيث

  • يعمل TSNE بشكل جيد مع إعداد واحد (حيث يتم إلغاء تنشيط Tensorflow ، Python-3.x) ، ومع ذلك ،

  • لا يعمل TSNE مع الإعداد الآخر (حيث يتم تنشيط Tensorflow ، Python 2.x).

الإعداد حيث يعمل TSNE بشكل جيد:

طرفية:

Macbook:~ BG$ which jupyter
/Users/BG/anaconda/bin/jupyter

دفتر Jupyer:

import sys
print (sys.version)

>

3.5.2 |Anaconda 4.2.0 (x86_64)| (default, Jul  2 2016, 17:52:12) 
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)]

ملاحظة: حاولت

conda remove numpy --force -y
pip uninstall numpy -y
conda install numpy

لجعل TSNE يعمل بشكل جيد مع إلغاء تنشيط Tensorflow.
ومع ذلك ، مع الإعداد الجديد أدناه (حيث يتعين علي استخدام Tensorflow) ، لم يعد هذا يعمل.
——-———-———-———-———-———-———-———-

الإعداد حيث لا يعمل TSNE:

طرفية:

Macbook:~$ source activate tensorflow
(tensorflow) Macbook:~$ which jupyter
/Users//anaconda/envs/tensorflow/bin/jupyter
(tensorflow) Macbook:~$ 

دفتر Jupyer:

import sys
print (sys.version)

>

2.7.13 |Continuum Analytics, Inc.| (default, Dec 20 2016, 23:05:08) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]

خطأ :
ValueError: array must not contain infs or NaNs

أي اقتراحات ؟ شكرا جزيلا

مثير للإعجاب. أعتقد أنه لا علاقة له بـ Tensorflow ؛ تخميني هو ذلك

[GCC 4.2.1 متوافق Apple LLVM 4.2 (clang-425.0.28)]

ضد

[GCC 4.2.1 متوافق Apple LLVM 6.0 (clang-600.0.57)]

هو الجاني !؟

شكرا على الرد :) أي حلول مقترحة / to_do_list؟

تحتاج إلى استخدام كليهما
Tensorflow و
تسني
في دفتر Jupyter ....

راجع للشغل: جربت للتو "من __future__ قسم الاستيراد" في Python 2.x ولم تحل المشكلة.

حسنًا ، لست متأكدًا مما إذا كان هذا يساعد - شخصيًا ، لم أعد أتعرض لهذه المشكلة الغامضة

Python 3.5.3 |Continuum Analytics, Inc.| (default, Feb 22 2017, 20:51:01) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin

أنا على Tf (الآن 1.0) أيضًا ، وليس لدي مشكلة Error: ValueError: array must not contain infs or NaNs هذه على أي حال عند التنفيذ

import numpy as np
from sklearn.manifold import TSNE

np.random.seed(1)

a = np.random.uniform(size=(100, 20))
TSNE(n_components=2, random_state=1).fit_transform(a)

التي لم تنجح في السابق.

ربما حاول إنشاء بيئة بيثون 3.5 جديدة وجرب المقتطف المذكور أعلاه لمعرفة ما إذا كان يعمل بدون أخطاء:

conda create -n yourenv python=3.5 numpy scipy scikit-learn
source activate yourenv
pip install tensorflow(-gpu)

مرحبا راسبت ،
نعم ، لقد جعلت TSNE يعمل على Python 3.5.
ومع ذلك ، لسبب آخر من الأفضل أن أستخدم Python 2.7 ، لذلك يجب أن أستمر في استكشاف ...

شكرا لمساعدتك.

هل لديك توزيعة Miniconda / Anaconda 2.7 قديمة (إيه) مثبتة؟ في هذه الحالة ، ربما تفكر في تثبيت واحد من أحدثها ، أو قم بتحديث جذر conda الخاص بك أو python الافتراضي وجربه مرة أخرى (أو قم بإنشاء بيئة py 27 جديدة عن طريق استبدال 3.5 بـ 2.7 في conda create -n yourenv python=3.5 numpy scipy scikit-learn )؟ (لست متأكدًا مما إذا كان هذا هو السبب حقًا ، لكنني أعتقد أن LLVM 4.2 (clang-425.0.28) قد يكون مشكلة ؛ نظرًا لأن الخطأ لا يبدو أنه يحدث عبر [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] )

التحديث: TSNE (الحيرة = 30 ، n_components = 2 ، init = 'pca' ، n_iter = 1000 ، الطريقة = 'بالضبط' ) تجعلها تعمل ...
الطريقة = "بالضبط" كانت الحيلة.

أيضا كانت تواجه هذه المشكلة. يبدو أن استخدام الطريقة = "دقيق" يعمل بالنسبة لي ، لكنه بطيء للغاية. ألا يوجد حقاً حل آخر وجده الناس؟

هل قرأت https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -264029983 و https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -264087057 ؟

كانت الطريقة الوحيدة التي تمكنت من خلالها إعادة إنتاج هذه المشكلة هي تثبيت numpy مع كل من pip و conda في نفس بيئة conda. إذا قمت بإنشاء بيئة conda من البداية ، فلن تواجه هذه المشكلة.

في حالة عدم تطابق مشكلتك مع هذا الوصف ، يرجى نشر الأوامر الدقيقة التي قمت بتشغيلها لإنشاء بيئة conda الخاصة بك ، حتى نتمكن من محاولة إعادة الإنتاج.

مرحبا،
قرأت التعليقات أعلاه ويمكنني إعادة إنتاج هذا. أعدت تشغيل الكود منذ بضعة أسابيع ، والآن تظهر هذه المشكلة. إليك مثال بسيط يعيد إظهار هذه المشكلة الآن:

from sklearn.manifold import TSNE
a = [[1,2,3],[4,5,6], [7,8,9]]
TSNE(n_components=2,).fit_transform(a)

وإخراج

import platform; print(platform.platform())
import sys; print("Python", sys.version)
import numpy; print("NumPy", numpy.__version__)
import scipy; print("SciPy", scipy.__version__)
import sklearn; print("Scikit-Learn", sklearn.__version__)

يكون

Darwin-16.5.0-x86_64-i386-64bit
Python 3.6.0 |Anaconda 4.3.0 (x86_64)| (default, Dec 23 2016, 13:19:00) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
NumPy 1.12.1
SciPy 0.19.0
Scikit-Learn 0.18.1

مرة أخرى ، يؤدي تغيير الطريقة إلى ( TSNE(method='exact') ) إلى التخلص من الخطأ.

بشكل عام ، لقد لاحظت نتائج مختلفة تمامًا عند استخدام TSNE الخاص بـ sklearn (مع الارتباك المحدد ومعايير أخرى) من تطبيق bh الذي نشرته Laurens van der Maaten وإصدار MATLAB. أتساءل عما إذا كان قد يكون هناك اتصال؟

هذا أصلحها. اعتذاري - لقد قمت بشكل منفصل بإلغاء تثبيت numpy و scikit learn و scipy ، ولكن ليس كما في 6665.

عانيت من نفس المشكلة كما ذكرت هنا ، وأنا لا أستخدم conda.

يتم تثبيت إصدار My Python عبر brew على macOS Sierra 10.12.4

Python 3.6.1
scipy==0.19.0
scikit-learn==0.18.1
numpy==1.11.1

أدت إضافة mode='exact' حل مشكلتي.

@ lesteve : لقد واجهت هذا الخطأ باستخدام الإعداد الذي وصفته (تم تثبيت نسختين من numpy). مجرد تحديث تثبيت conda لـ numpy إلى نفس الإصدار مثل تثبيت pip (1.12.1) قد أدى إلى الحيلة بالنسبة لي. لقد قمت بإزالة تثبيت pip numpy ، على الرغم من أنني لم أكن أنوي الحصول على نسختين :)

@ lesteve : شكرا لك على الحل! تصادف وجود هذا الخطأ ثم وجدت هذه المناقشة. قم بإصلاحه على الفور بعد إزالة الإصدار المكرر من numpy.

منسوخة ، قمت بإزالة تثبيتات Pip لـ conda numpy والمحدثة.

داروين -16.7.0-x86_64-i386-64 بت
('Python'، '2.7.13 | Anaconda custom (x86_64) | (افتراضي ، 20 ديسمبر 2016 ، 23:05:08) \ n [GCC 4.2.1 متوافق مع Apple LLVM 6.0 (clang-600.0.57)]')
("NumPy"، "1.13.1")
("SciPy"، "0.19.0")
("Scikit-Learn"، "0.18.1")

يبدو الأمر جيدًا على جهاز Linux الخاص بي:
Linux-3.0.101-0.47.71-default-x86_64-with-SuSE-11-x86_64
('Python'، '2.7.12 | Anaconda 2.3.0 (64 بت) | (افتراضي ، 2 يوليو 2016 ، 17:42:40) \ n [GCC 4.4.7 20120313 (Red Hat 4.4.7-1) ] ')
("NumPy"، "1.12.1")
("SciPy"، "0.19.1")
("Scikit-Learn"، "0.18.1")

wolfiex هكذا فعلت

conda remove numpy --force -y
pip uninstall numpy -y
conda install numpy

ذات صلة إلى حد ما ، أوصيك بالتحديث إلى scikit-Learn 0.19 الذي يحتوي على بعض الإصلاحات في t-SNE

الحصول على نفس الخطأ الآن

مرحبًا rahulsnair ، هل تمانع في فتح إصدار جديد برمز قابل لإعادة الإنتاج و traceback والإصدارات التي تستخدمها؟ هذه المشكلة قديمة جدًا وقد تغير الرمز كثيرًا. شكر!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات