Scikit-learn: t-SNE schlägt mit Array fehl und darf keine infs oder NaNs enthalten (OSX-spezifisch)

Erstellt am 15. Apr. 2016  ·  108Kommentare  ·  Quelle: 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')

Beim Versuch, ein t-SNE auszuführen

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

jedoch

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

Full Stack Trace:


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

Hilfreichster Kommentar

Für alle, die davon betroffen sind, sollte dies Folgendes beheben:

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

Lassen Sie mich wissen, wenn das bei Ihnen nicht funktioniert.

Alle 108 Kommentare

Gleiches gilt für ('Scikit-Learn', '0.18.dev0')

Haben Sie etwas dagegen, Ihre Daten X mit mir zu teilen?

Klar, wo und in welchem ​​Format möchten Sie es?

Am 17. April 2016, um 09:11 Uhr, schrieb 康 洋[email protected] :

Haben Sie etwas dagegen, Ihre Daten X mit mir zu teilen?

- -
Sie erhalten dies, weil Sie den Thread verfasst haben.
Antworten Sie direkt auf diese E-Mail oder sehen Sie sie auf GitHub https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -210968577 an

Meine E-Mail lautet [email protected]
Wie ich weiß, gibt es eine Funktion numpy.save zum Speichern eines Arrays in einer Binärdatei im .npy-Format ~~

Ich teste deine Daten in Ubuntu 14.04 LTS mit
Python == 2.7.6
scikit-learn == 0.17.1
numpy == 1.8.2
scipy == 0.13.3
Es ist in Ordnung und löst den ValueError nicht aus. Der Testcode lautet:
`numpy importieren
a = numpy.load ('/ root / test.npy')
a.shape drucken
print numpy.isnan (a) .all () #False
print numpy.isfinite (a) .all () #True
print numpy.isinf (a) .all () #False

aus sklearn.manifold TSNE importieren
proj = TSNE (). fit_transform (a) # [[2.35503527e + 00 1.15976751e + 01] .... [3.29832591e + 00 8.98212513e + 00]]
print proj`


Dann aktualisiere ich numpy, scipy auf 1.11.0, 0.17.0 und teste mit dem gleichen Code und es wird auch kein Fehler ausgegeben.

Wiedergabe für 3.5 mit Anaconda unter 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

Beispiellauf:

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

Danke @ ivan-krukov, aber ich kann nicht in Python 3.3 replizieren. Werde es mit 3.5 versuchen

Dies gilt nicht für linux (4.4.0-21, Ubuntu 16.04) mit denselben Paketen unter 3.5.

Ich bin auf El-Capitan, aber ich kann keine Python 3.5-Installation zum Laufen bringen.

Gibt es ein Update dazu?

Ich habe das Problem mit einem Datensatz von mir, mit Anaconda, Py 3.5, sklearn 0.17.1, OSX El Capitan.
Ich kann den Fehler mit dem Beispiel von @ ivan-krukov reproduzieren.

Gleicher Fehler. Python 2.7.6 unter OS X El Capitan unter 0.17. Versuchte den gleichen Code unter Linux mit Python 2.7.6 und 0.17, und es funktioniert.

Gleicher Fehler.
OSX El Capitan Python 3.5.1
scikit-learn == 0.17.1
scipy == 0.17.1

Ich habe das gleiche Problem und würde mich über eine Lösung (oder Problemumgehung?) Wirklich freuen.
Systemversion: OS X 10.11.5
Python 3.5.1 :: Anaconda 4.0.0 (x86_64)
numpy.version.version 1.11.0
scipy.version 0.17.1
sklearn. Version 0.17.1

Ich kann den Fehler auch mit dem Codebeispiel von ivan-krukov reproduzieren

Gleiches Problem unter OS X EI Capitan mit Python 3.5

Systemversion: OS X 10.11.5
Python 3.5.1 :: Continuum Analytics, Inc.
numpy. Version 1.11.1
scipy. Version 0.16.0
sklearn. Version 0.17.1

Gleiches Problem. Obwohl ich bemerkt habe, dass es nur für eine Teilmenge meines Datensatzes auftritt und nicht für die ganze Sache . Das heißt, wenn ich TSNE auf den gesamten Daten zu tun setzte es funktioniert, wenn ich es auf einem reduzierten Satz zu tun ist es nicht.

O_o ;; Dies nur in, wenn ich die gleiche "kaputte" Teilmenge wiederhole, die nicht funktioniert (mittels Liste * 10), dann funktioniert es. Das Multiplizieren jedes einzelnen Vektors mit 10 funktioniert nicht, das Duplizieren des Datums jedoch. Nur die Länge der Liste zu verdoppeln, reicht nicht aus. Vielleicht ist dies eine Art Freiheitsgrad-Check-Amoklauf?

@ ivan-krukov Ich habe heute die Kugel gebissen und eine El Capitan VM installiert. Leider kann ich Ihr Problem nicht reproduzieren.

@Concomitant Können Sie den Fehler in dem eigenständigen Beispiel unter https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -218365487 reproduzieren?

Ich bin auf El-Capitan, aber ich kann keine Python 3.5-Installation zum Laufen bringen.

@jnothman Es scheint nicht nur unter Python 3.5 zu passieren. Wenn Sie also versuchen könnten, mit Python 2.7 zu reproduzieren (Snippet: https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment-218365487) ) das wäre toll.

@lesteve Ich kann das Problem reproduzieren.

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

Nach dem gleichen Code jedoch:

>>> 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]])

Bizarr.

Ich kann auch nicht mit Python 3.5.1, Numpy 1.11.1, Scipy 0.17.1 und Scikit-Learn 0.17.1 von Miniconda (mit MKL) auf einer Virtualbox mit OSX El Capitan reproduzieren. Ich werde später eine echte Mac-Hardware anprobieren.

Können Sie auch bei @Concomitant überprüfen, ob Sie das Problem im aktuellen Status des Scikit-Learn-Master-Zweigs reproduzieren können?

@lesteve und andere Ich kann den Fehler mit dem zuvor auf dem neuesten Master mit Python 2.7 veröffentlichten

Systeminformationen:

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')

Ich habe es erneut auf einem echten Mac mit OSX El Capitan 10.11.3 versucht (mit Anacondas neuestem Numpy Scipy und Scikit-Learn, der gleichen Einstellung wie von @Concomitant unter https://github.com/scikit-learn/scikit-learn/issues angegeben / 6665 # issuecomment-229703129), konnte das Problem jedoch auch nicht reproduzieren (es wurde mehrmals versucht, das Snippet auszuführen).

Was aber seltsam ist, dass ich trotz der np.random.seed(1) -Linie unterschiedliche Ergebnisse für die Ausgabe von fit_transform erhalte. Dies könnte ein Fehler an sich sein.

Was aber seltsam ist, dass ich trotz der Zeile np.random.seed (1) unterschiedliche Ergebnisse für die Ausgabe von fit_transform erhalte. Dies könnte ein Fehler an sich sein.

Eigentlich habe ich das Code-Snippet von @Concomitant zu schnell gelesen: Anstelle von random.seed(1) sollte es np.random.seed(1) sonst wird das numpy RNG nicht richtig neu gesetzt und man kann keine deterministischen Ergebnisse erhalten.

Außerdem wurde mir jetzt klar, dass ich die ganze Diskussion zu schnell gelesen habe und dass der Fehler nur bei Python 2.7 auftritt. Ich werde es erneut versuchen.

Ich kann auch nicht mit Python 2.7.12 von conda unter OSX 10.11.3 reproduzieren.

Tatsächlich kann @Ekliptor das Problem mit Python 3.5.1 von conda reproduzieren, sodass es wahrscheinlich auch nicht mit der Version von Python zusammenhängt. Vielleicht hängt es von der Nebenversion von OSX ab. Wird aktualisiert und erneut versucht.

Ich kann auch nicht mit OSX 10.11.5 replizieren. Ich habe beide mit Python 2.7.12 und 3.5.2 versucht, die mit conda zusammen mit numpy 1.11.1, scipy 0.17.1 und scikit-learn 0.17.1 installiert wurden.

Ich weiß nicht was ich tun soll. Wenn einer von Ihnen das Problem reproduzieren kann, versuchen Sie bitte, einen numpy zufälligen Startwert zu finden, der das Problem auslöst (verwenden Sie np.random.seed(my_seed) anstelle von random.seed(1) im obigen Snippet) und teilen Sie den Wert hier (zusammen mit) mit die Version von OSX und Sie Python-Pakete).

Ich kann bestätigen, dass das Problem mit der neuesten Version behoben wurde. Ich kann es nicht mehr wie zuvor reproduzieren.
Ich habe nur numpy aktualisiert:
numpy.version.version 1.11.1

Allen Leuten, die mit Tensorflow arbeiten, kann ich hinzufügen:
Wenn ich versuche, eine sehr kleine Stichprobe (<200 Punkte) zu zeichnen, stoße ich manchmal immer noch auf diesen Fehler. Nach dem Erhöhen der Stichprobengröße übergebe ich tsne.fit_transform (), es funktioniert immer.

Vielen Dank an @Ekliptor für die Überprüfung, ob es mit scikit-learn master funktioniert. @joelkuiper und @Concomitant bestätigen Sie, dass der Scikit-Learn-Master auch für Sie funktioniert? Wenn ja, können wir dieses Problem schließen.

Ich habe Master installiert, das Code-Snippet läuft jetzt sauber.

scheint jetzt für alle zu funktionieren. Schließen.

Entschuldigung, aber ich bekomme dies immer noch unter Python 3.5.1, Scikit 0.17, Scikit-Learn 0.18 (Commit 9e913c04d748) und Numpy 1.11.1 unter Mac OS 10.11.5.

@dmyersturnbull erhalten Sie den Fehler, wenn Sie das Snippet von https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -218365487 ausführen?

@lesteve habe ich mit genau diesem Snippet gemacht, ja. Ich bekomme es jedoch nicht mehr, nachdem ich meine Anaconda-Installation gelöscht und mit Python 3.5.2 von Grund auf neu installiert habe.

Ich habe das gleiche Problem mit Python 3.5.2, scikit-learn 0.17.1, scipy 0.17.1, numpy 1.11.1 unter Mac OS X El Capitan 10.11.3. Es funktioniert, wenn ich mehr als 2100 Punkte habe, aber bei niedrigeren Werten fehlschlägt.

Ich habe das gleiche Problem mit Python 3.5.2, scikit-learn 0.17.1, scipy 0.17.1, numpy 1.11.1 unter Mac OS X El Capitan 10.11.3. Es funktioniert, wenn ich mehr als 2100 Punkte habe, aber bei niedrigeren Werten fehlschlägt.

Analog schlägt für Tiefpunktwerte fehl

Bitte wieder öffnen

Ich habe das gleiche Problem unter OS X 10.11.6, Python 3.5.1, sklearn 0.17.1 und numpy 1.11.1.
Zu diesem Datensatz: https://dl.dropboxusercontent.com/u/103591/vals.out (mit np.savetxt)

Analog schlägt für Tiefpunktwerte fehl

@ Lucidyan Ich verstehe nicht, was du damit meinst.

Ich habe das gleiche Problem unter OS X 10.11.6, Python 3.5.1, sklearn 0.17.1 und numpy 1.11.1.
Zu diesem Datensatz: https://dl.dropboxusercontent.com/u/103591/vals.out (mit np.savetxt)

@pbnsilva kannst du dieses unten gepostete Snippet ausprobieren? Möglicherweise müssen Sie es mehrmals ausführen, da der Startwert leider nicht richtig festgelegt ist (Sie müssen np.random.seed anstelle von 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)

Bonuspunkte, wenn Sie ein Startargument für np.random.seed und ein random_state Argument für TSNE , das das Snippet deterministisch macht.

Alternativ berichteten einige Leute, dass dieser Fehler im Master behoben wurde. Könnten Sie versuchen, einen Scikit-Learn-Master zu erstellen, um festzustellen, ob das Problem verschwindet?

@lesteve Ich meinte, dass ich den gleichen Fehler mit einer kleinen Anzahl von Instanzen mit den gleichen Systemparametern erhalte (Python 3.5.2, scikit-learn 0.17.1, scipy 0.17.1, numpy 1.11.1 unter Mac OS X El Capitan 10.11.3)

@pbnsilva kannst du dieses unten gepostete Snippet ausprobieren? Möglicherweise müssen Sie es mehrmals ausführen, da der Startwert leider nicht richtig festgelegt ist (Sie müssen np.random.seed anstelle von random.seed verwenden).

Ich habe es versucht und es schlägt mit X_SIZE <= 1750 fehl (Y_SIZE = 20, n_components = 2 wurden Konstanten). Wenn ich anfange, die Konstanten (Erhöhung) mit festem X_SIZE = 1750 zu ändern, schlägt dies ebenfalls fehl.

@ Lucidyan Könntest du das gleiche Snippet mit Scikit-Learn Master ausprobieren und sehen, ob es auch fehlschlägt?

Ja, ich arbeite nicht für mich (numpy 1.11.1, El capitan.10.11, sklearn 0.17.1, python 3.5.2). Ärgerlicherweise hat es alten Code gebrochen, der funktioniert hat. Was habt ihr geändert ...?

@ act65 Wir sind mehr als daran interessiert, dem auf den Grund zu gehen, aber wir konnten es nicht reproduzieren und es scheint, als würden wir bisher leider gemischte Berichte von Benutzern erhalten.

Wenn Sie dies noch nicht getan haben (leider sind wir keine Gedankenleser und "nicht für mich arbeiten" sagt uns nicht, was Sie versucht haben), können Sie versuchen, das oben unter https://github.com/scikit-learn erwähnte Snippet auszuführen

Was wäre dann wirklich großartig, wenn Sie es mit dem einfach zu installierenden Release-Kandidaten 0.18 versuchen könnten (dringend empfohlen, dies in einer separaten virtuellen Umgebung oder in einer separaten Umgebung zu tun):

pip install --pre scikit-learn -U

Bearbeitet: 0.18 wurde veröffentlicht, sodass Sie es einfach verwenden können (es ist nicht erforderlich, --pre ):

pip install scikit-learn -U

Führen Sie das Snippet erneut aus, um festzustellen, ob es in 0.18 behoben ist, wie einige Benutzer bereits in diesem Thread berichtet haben.

0.18 wird in ein paar Wochen, wenn nicht Tagen veröffentlicht, damit Sie wissen, was Sie tun müssen, wenn Sie uns helfen möchten, dem vor der Veröffentlichung auf den Grund zu gehen ;-).

ja mein schlechtes, hätte klarer sein sollen. (Ich hatte ungefähr das Gleiche versucht, was andere hatten, nur auf MNIST).

sowieso funktioniert es! Vielen Dank :)
pip install --pre scikit-learn -U behoben

OK, danke für die Rückmeldung und schön zu hören, dass dies für Sie im Release-Kandidaten 0.18 behoben ist! Dies scheint mit dem übereinzustimmen, was andere gemeldet haben, als sie sagten, dass es im Master behoben wurde.

Der Vollständigkeit halber wird jedoch empfohlen, die veröffentlichten Versionen für den Produktionscode beizubehalten. Daher müssen Sie möglicherweise etwas länger warten, bis die Version 0.18 veröffentlicht ist.

@lesteve
Ich habe das Snippet auf Version 0.18rc2 ausprobiert, das von installiert wurde

pip install --pre scikit-learn -U

Und es scheint zu funktionieren! Prost!

Vielen Dank an @Lucidyan für den Versuch.

Entschuldigung, ich erhalte nach dem Upgrade auf scikit-learn 0.18 ( pip install --pre scikit-learn -U ) in conda env immer noch diesen Fehler mit dem obigen Code-Snippet.

Hier sind meine Systeminformationen:
OS X El Capitan Version 10.11.4
Python 2.7.12
sklearn 0.18 (hat den gleichen Fehler auch bei sklearn 0.17.1 erhalten)
numpy 1.11.1 (hat den gleichen Fehler auch bei numpy 1.11.2 erhalten)
scipy 0.18.1

Ich habe jedoch das gleiche Code-Snippet auf einem Linux-System ausgeführt und keinen Fehler erhalten.
Die Systeminfo des Linux-Systems lautet:
Ubuntu 14.04.5 LTS (GNU / Linux 3.13.0-91-generic x86_64)
Python 2.7.6
sklearn 0.18
numpy 1.11.2
scipy 0.13.3

Versuchen Sie, numpy, scipy und scikit-learn zu deinstallieren und neu zu installieren. Wenn dies immer noch fehlschlägt, versuchen Sie es in einer anderen virtuellen Umgebung (oder in einer Conda-Umgebung, wenn Sie Conda verwenden), um sicherzustellen, dass in Ihrer Python-Umgebung nichts nicht stimmt.

Erhalten Sie immer noch den gleichen Fehler ( ValueError: array must not contain infs or NaNs ) in sklearn 0.18 ( 0.18-np111py35_0 ) über conda. Die Pip-Räder scheinen jedoch gut zu funktionieren!

Erhalten Sie immer noch den gleichen Fehler (ValueError: Array darf keine Infs oder NaNs enthalten) in sklearn 0.18 (0.18-np111py35_0) über conda. Die Pip-Räder scheinen jedoch gut zu funktionieren!

Hmmm interessant ... könnten Sie versuchen, Conda-Pakete ohne mkl zu verwenden, dh so etwas wie conda create -n sklearn_nomkl python scikit-learn nomkl damit wir sehen können, ob das eine Sache von MKL gegen Openblas ist?

Außerdem Bonuspunkte, wenn Sie ein Snippet bereitstellen können, das das Problem mit einem festen zufälligen Startwert (dh unter Verwendung von np.random.RandomState(some_int) ) reproduziert, der in Zukunft als Referenz-Snippet verwendet werden kann. Bis jetzt ist das Snippet, das wir haben, nicht deterministisch ( random.seed wird verwendet und hat keinen Einfluss auf numpy.random seed).

Sicher kein Problem. Dies kann in der Tat ein BLAS-Problem sein, die conda create -n sklearn_nomkl python scikit-learn nomkl env funktioniert einwandfrei.

In Bezug auf das Snippet ... wird dies interessant. Z.B,

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)

reproduziert das Problem auf meinem Computer. Wenn ich jedoch digits_tsne_train = tsne.fit_transform(X_train) durch digits_tsne_train = tsne.fit_transform(digits.data) ersetze, scheint es in Ordnung zu sein. Es wäre gut, ein leichteres Beispiel zu finden, um diesen speziellen Fall zu den Travis-Tests hinzuzufügen.

EDIT: Gleiches gilt für Iris. iris.data funktioniert in fit_transform, ein geteilter Datensatz ( X_train ) nicht. Vielleicht ist in train_test_split Komisches los. Allerdings scheinen sowohl X_train als auch iris.data Float 64-Arrays zu sein ...

Was ist mit dem Snippet von https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -243782185? Sie haben keine Möglichkeit gefunden, es deterministisch zu machen und dennoch auf Ihrem Computer zu versagen?

Das Snippet

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)

reproduziert den Fehler (aber es funktioniert gut auf der nomkl env)

OK, vielen Dank dafür, zumindest haben wir jetzt einen deterministischen Ausschnitt. Können Sie für die Aufzeichnung die Ausgabe dieses Snippets veröffentlichen:

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__)

Können Sie auch aus Gründen der Vernunft sicherstellen, dass Sie das Problem in einer frischen Conda-Umgebung reproduzieren können?

Um ehrlich zu sein, bin ich mir nicht sicher, wohin wir gehen. Ich habe es seitdem nicht mehr versucht, aber ich konnte nicht auf einer El Capital Virtual-Box reproduzieren. @Ogrisel konnte auch nicht auf einem OSX-Laptop reproduzieren. Zu diesem Zeitpunkt gab er an, dass möglicherweise ein hardwarespezifisches Problem vorliegt.

Sicher,

die Maschine, die dieses Problem verursacht:

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

(getestet in einer frischen Conda-Umgebung)

Möglicherweise liegt ein hardwarespezifisches Problem vor.

Ich denke, Sie können auf etw sein! Ich habe es auf meinem anderen Mac versucht und es funktioniert dort gut. Der einzige Unterschied besteht in der obigen Ausgabe, die auf einem älteren Kernel ausgeführt wird ( Darwin-15.6.0-x86_64-i386-64bit ). Der zweite Mac wurde noch nicht auf macOS Sierra aktualisiert, der auf dem früheren Computer mit diesem Problem ausgeführt wird. Könnte mit dem Betriebssystem zusammenhängen. Ich werde die zweite Maschine im nächsten Monat oder so auf Sierra aktualisieren (ich bin mitten in einem Projekt und möchte keine Probleme lösen), aber ich kann Sie wissen lassen, ob das Update auf Sierra zu diesem Problem auf der Website führt zweite Maschine (oder vielleicht jemand anderes mit macOS Sierra könnte es testen, damit wir jetzt, wenn es ein Betriebssystem ist)

Angesichts der Tatsache, dass das Problem in verschiedenen OSX-Versionen gemeldet wurde, bezweifle ich, dass dies nur ein Problem mit der OSX-Version ist. Die Vermutung von IIRC

Eine andere (zeitintensivere) Möglichkeit, dieses Problem zu beheben, besteht darin, herauszufinden, wo die NaNs im Code erscheinen.

Die Vermutung von IIRC

Hm, wie würde sich die Conda Scikit-Learn-Version von den Pip-Rädern unterscheiden? Weil letztere auf derselben Maschine zu arbeiten scheinen. Vielleicht hat es irgendwie mit Conda zu tun

Eine andere (zeitintensivere) Möglichkeit, dieses Problem zu beheben, besteht darin, herauszufinden, wo die NaNs im Code erscheinen.

Ich habe festgestellt, dass der Gradient in https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/manifold/t_sne.py#L387 explodiert, bis er an einer Position zu -inf die 25. Iteration in der https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/manifold/t_sne.py#L386 for-Schleife

...
   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
...

Auf der anderen Maschine (die gut funktioniert) sind die Verläufe nach derselben Iteration alle <0. Irgendwie funktioniert die _gradient_descent -Funktion nicht richtig (möglicherweise aufgrund einer BLAS-Sache).

Hm, wie würde sich die Conda Scikit-Learn-Version von den Pip-Rädern unterscheiden? Weil letztere auf derselben Maschine zu arbeiten scheinen. Vielleicht hat es irgendwie mit Conda zu tun

Die Pip-Räder verwenden OpenBLAS und Sie haben kein Problem, wenn Sie OpenBLAS mit Conda verwenden (durch den Trick nomkl ). Dies sieht also wie ein MKL-Problem aus, das darüber hinaus wahrscheinlich CPU-spezifisch ist.

Tolle Arbeit beim Debuggen des Problems übrigens! Bonuspunkte, wenn Sie das Problem weiter eingrenzen können (z. B. indem Sie die Daten auswählen, bevor die Iteration inf angezeigt wird). Das Problem tritt sehr wahrscheinlich in einigen Cython-Codes in sklearn / manifold / _barnes_hut_tsne.pyx auf.

Sollte diese Ausgabe angesichts der neuesten Erkenntnisse nicht erneut geöffnet werden? Ich habe es auch getroffen und es auch geschafft, mit dem Nomkl-Trick daran vorbei zu kommen, aber ich fühle mich wie ein aktiver Bug gegen einen geschlossenen, nicht wahr?

Andere, die dies erreicht haben: https://discussions.udacity.com/t/assignment-5-error-in-the-main-code-valueerror-array-must-not-contain-infs-or-nans/178187 / 7

Sie haben Recht, wieder zu öffnen. Dieser ist ein ernsthafter, scheint hardwarespezifisch zu sein und keiner der Kernentwickler konnte ihn reproduzieren. Dies kann nur behoben werden, wenn Personen mit dem Problem einige Zeit in das weitere Debuggen des Problems investieren.

Tolle Arbeit beim Debuggen des Problems übrigens! Bonuspunkte, wenn Sie das Problem weiter eingrenzen können (z. B. indem Sie die Daten auswählen, bevor die Iterationsinfo angezeigt wird). Das Problem tritt sehr wahrscheinlich in einigen Cython-Codes in sklearn / manifold / _barnes_hut_tsne.pyx auf.

Ich freue mich, nach all den November-Fristen im Dezember weiter darauf eingehen zu können ... Auch wenn dies noch weiter isoliert werden kann, bin ich gespannt, ob es eine Lösung für ein solches hardwarespezifisches Problem gibt. Vielleicht kann es sich lohnen, eine spezifischere Ausnahme / Warnung auszulösen, bis der Gradient Infs mit einem Hinweis zu diesem Problem enthält, bis dies vollständig behoben ist.

Ich habe gerade eine neue conda virtualenv erstellt und eine devp-Version von sklearn aus dem Quellcode erstellt, der frisch aus dem Zweig sciki-learn master gegabelt wurde. Der Fehler ist verschwunden. Wird das devp sklearn aus dem Quellcode mit OpenBLAS anstelle von MKL erstellt?

Ich freue mich, nach all den Novemberfristen im Dezember weiter darauf eingehen zu können ...

Hört sich toll an, vielen Dank!

Auch wenn dies weiter isoliert werden kann, bin ich gespannt, ob es eine Lösung für ein solches hardwarespezifisches Problem gibt.

Wir sind uns nicht sicher, ob wir unseren Cython-Code ändern können, wenn wir ihn isoliert haben. Es könnte auch ein Openblas-Problem sein, und das wäre großartig, wenn es stromaufwärts gemeldet würde, zumal Räder Openblas verwenden.

Vielleicht kann es sich lohnen, eine spezifischere Ausnahme / Warnung auszulösen, bis der Gradient Infs mit einem Hinweis zu diesem Problem enthält, bis dies vollständig behoben ist.

Das Hinzufügen einiger Ratschläge zur Fehlermeldung (nur unter OS X) klingt nach einer guten Idee, aber ich bin mir nicht sicher, was darin stehen soll, vielleicht "Überlegen Sie, ob Sie conda verwenden und scikit-learn mit MKL installieren" oder ähnliches.

Wird das devp sklearn aus dem Quellcode mit OpenBLAS anstelle von MKL erstellt?

@zhongyuk hängt davon ab, welche Bibliothek Sie installiert haben. Eine Möglichkeit zu wissen, sobald Sie Scikit-Learn aus dem Quellcode erstellt haben, besteht darin, das Äquivalent von ldd (Google scheint otool -L zu sagen) auf sklearn/cluster/_k_means.so auszuführen (Name wird anders sein, wenn Sie verwenden Python 3, dh so etwas wie sklearn/cluster/_k_means.cpython-35m-x86_64-linux-gnu.so ). Auf meinem Ubuntu-Computer bekomme ich zum Beispiel Folgendes:

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)

So können Sie aus der dritten Zeile ersehen, dass MKL verwendet wird.

aber ich bin mir nicht sicher, was es sagen soll, vielleicht "erwäge die Verwendung von conda und installiere scikit-learn mit MKL" oder so ähnlich.

Ich wollte nur schreiben, dass ich denke, Sie haben es umgedreht: Die Räder funktionierten und das Problem trat nur auf, als ich es über Conda mit MKL benutzte ... Nun, ich denke, ich habe in gewisser Weise gute Nachrichten: Ich wollte nur Führen Sie das obige Beispiel erneut aus, bei dem dieses Problem zuvor bestätigt wurde

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)

und ich bekomme dieses Problem nicht mehr. Ich erinnere mich, dass ich Miniconda neulich wegen einiger anderer Probleme neu installiert habe. Glaubst du, es könnte mit einem Problem in der alten Wohnung zusammenhängen? Wäre großartig, wenn einige andere Personen, die dieses Problem hatten, möglicherweise auch versuchen könnten, conda zu aktualisieren / neu zu installieren und zu prüfen, ob dies das Problem für sie löst. In der Zwischenzeit werde ich versuchen, einen alten Backup-Status zu finden, um herauszufinden, welche Conda-Version ich zuvor installiert habe. (Im Moment habe ich Conda 4.2.12)

Ich möchte nur sagen, dass ich otool -L auf sklearn/manifold/_barnes_hut_tsne.so (ich nehme an, dies ist die kompilierte Datei t_sne.py?), Es scheint, als würde tatsächlich BLAS verwendet. Und derjenige, der Fehler geworfen hat, scheint MKL zu verwenden.

Die Conda-Version, die ich habe, ist 4.2.13. Sowohl die env, die den Fehler auslöst, als auch die env mit dem von der Quelle erstellten sklearn (das keinen Fehler auslöst) befinden sich in conda.

Hm, interessant, also ist es doch kein Conda-Problem ... Neugierig, warum es jetzt bei mir funktioniert: /
(Alles, was ich denken kann, was sich geändert hat (außer bei der Neuinstallation von conda), war ein Neustart: P)

Ich wollte nur schreiben, dass ich denke, Sie haben es umgedreht: Die Räder funktionierten und das Problem trat nur auf, wenn ich es über Conda mit MKL benutzte

Ja, tut mir leid. Ich werde den Titel der Ausgabe bearbeiten, um zu versuchen, ihn für das nächste Mal richtig zu speichern.

Hm, interessant, also ist es doch kein Conda-Problem ... Neugierig, warum es jetzt bei mir funktioniert: /
(Alles, was ich denken kann, was sich geändert hat (außer bei der Neuinstallation von conda), war ein Neustart: P)

Hmmm, zufällige Vermutung vielleicht die mkl-Version, obwohl, wenn ich glaube, dass die Ausgabe von conda info mkl die neueste mkl-Version (11.3.3) vom 13.05.2016 ist.

@zhongyuk versuchen, scikit-learn in einer conda env zu erstellen, die mkl verwendet. Ich glaube, dies sollte ausreichen, damit mkl abgeholt wird (wahrscheinlich eine gute Idee in diesem Fall, make clean und dann make in zu tun

@lesteve Ich habe Scikit-Learn in zwei virtuellen Conda-Umgebungen aus dem Quellcode erstellt (Zweig 0.18 Release). Derjenige, der MKL verwendet, löst tatsächlich den Fehler aus. derjenige, der libBLAS verwendet, wirft keinen Fehler.

Die Ausgabe mit otool -L auf sklearn/manifold/_barnes_hut_tsne.so ist hier (falls die MKL-Version Ihnen einen Hinweis gibt?)

```@rpath/libmkl_intel_lp64.dylib (Kompatibilitätsversion 0.0.0, aktuelle Version 0.0.0)
@ rpath / libmkl_intel_thread.dylib (Kompatibilitätsversion 0.0.0, aktuelle Version 0.0.0)
@ rpath / libmkl_core.dylib (Kompatibilitätsversion 0.0.0, aktuelle Version 0.0.0)
@ rpath / libiomp5.dylib (Kompatibilitätsversion 5.0.0, aktuelle Version 5.0.0)
/usr/lib/libSystem.B.dylib (Kompatibilitätsversion 1.0.0, aktuelle Version 1226.10.1)

@zhongyuk großartig! Können Sie der Vollständigkeit halber die Ausgabe von conda list '(mkl|cython|numpy|scipy)$' (in Ihrer MKL-Conda-Umgebung) veröffentlichen? Während wir gerade dabei sind, wären Ihre CPU-Informationen ( sysctl -n machdep.cpu.brand_string laut Google) und Ihre Plattforminformationen ( python -c 'import platform; print(platform.platform())' ) großartig.

Was wirklich großartig wäre, wäre, dort fortzufahren, wo @rabst aufgehört hat, und das Problem weiter zu isolieren:
https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -258311980

Da dies mit BLAS zusammenhängt, ist meine Vermutung, dass in dieser Zeile etwas schief geht, was dazu führt

@lesteve Ausgabe von conda MKL Umgebungsinformationen:

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 

CPU-Info: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Plattforminfo: Darwin-15.4.0-x86_64-i386-64bit

Ich werde mich mit dem explodierenden Gradientenproblem befassen , das Laufenden halten.

@zhongyuk Wenn es hilft, habe ich ein sehr ähnliches Setup (kann das Problem seit der Neuinstallation von miniconda nicht mehr reproduzieren), außer dass ich macOS Sierra anstelle von OS X El Capitan habe und numpy 1.11.2 anstelle von 1.11.1 .

@rasbt hmm, ich frage mich, ob das Problem in Sierra

@zhongyuk Hm, ich denke, es ist unwahrscheinlich, dass es verwandt ist. Bevor ich miniconda neu installiert habe, hatte ich auch das Problem in macOS Sierra. PS: Tensorflow funktioniert gut für mich in Sierra, aber ich mache nur CPU- und Prototyping auf meinen Macs, sodass ich nichts über GPU-Probleme im Zusammenhang mit Sierra weiß

@rasbt hmm, das ist gut zu wissen, dass TF in Sierra gut funktioniert. Möchten Sie otool -L für die Datei sklearn/manifold/_barnes_hut_tsne.so auf Ihrer Plattform ausführen, um zu sehen, welche Mathematikbibliothek sklearn darunter verwendet? Zumindest auf diese Weise können wir wissen, ob das Problem nach der Neuinstallation von miniconda behoben wurde und grundsätzlich mit der Mathematikbibliothek zusammenhängt.

Ich erhalte Folgendes für _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 Hmm , das ist wirklich interessant. Es wird auch MKL verwendet. Ich weiß nicht genug über die Mathematikbibliothek, um zu spekulieren, was das bedeutet ... @lesteve wird wahrscheinlich mehr daraus schließen können?

Ich habe festgestellt, dass auf meiner Plattform libmkl_intel_lp64.dylib nicht geladen ist ... Ist es möglich, dass das Problem verursacht wurde?

WOW, ja! es wird verursacht durch libmkl_intel_lp64.dylib nicht geladen !!! Ich habe diesen Thread beim Stapelüberlauf gefunden und dann conda install --debug mkl , dann otool -L in der Datei sklearn/manifold/_barnes_hut_tsne.so , dann libmkl_intel_lp64.dylib geladen und das Code-Snippet ausgeführt , Fehler ging weg! Haben Sie fünf Teamarbeit! @rasbt

Wenn jemand auf seiner Plattform nachsehen könnte, ob der Fehler behoben ist, nachdem er sichergestellt hat, dass libmkl_intel_lp64.dylib geladen ist, wäre das großartig!

@lesteve Da es so aussieht, als hätten viele Leute dieses Problem getroffen, und es sieht so aus, als ob es mit (einer Version von?) conda zusammenhängt, die keine vollständigen MKL-Bibliotheken extrahiert (mein bisheriges Verständnis der Situation), obwohl dies nicht der Fall ist Ein Scikit-Lernfehler. Ich denke, dass es nett wäre, (OS X) -Nutzern eine Bemerkung oder eine Warnung oder eine Fehlermeldung hinzuzufügen. Auf diese Weise können sie zumindest überprüfen, ob MKL lib vollständig auf ihrer Plattform extrahiert ist, und es dann beheben, wenn dies nicht der Fall ist.

@zhongyuk genial, froh zu hören, dass du es libmkl_intel_lp64.dylib - das wäre großartig (in Bezug auf das Wissen, was los ist) :). Das würde auch erklären, warum es jetzt nach der Neuinstallation von Miniconda für mich funktioniert ... Wäre großartig, wenn jemand anderes das "Update" versuchen könnte.

Wenn das oben erwähnte libmkl_intel_lp64.dylib dieses Problem wirklich verursacht hätte, wäre die verbleibende Frage, wie man damit beim Scikit-Lernen umgeht. Ich meine, dieser "Bug" ist irgendwie abscheulich und es kann für die Leute etwas schwierig sein, herauszufinden, dass es an libmkl_intel_lp64.dylib . Ich würde wahrscheinlich kein zusätzliches "Wenn Gradient Inf Raise Error + Message enthält" in den Code in Scikit-Learn einfügen, da dies in Bezug auf die Leistung ziemlich ärgerlich sein könnte. Ich denke jedoch, dass das Hinzufügen eines Hinweises oder Kommentars in der Installation und / oder in den T-SNE-Dokumenten eine gute Idee wäre.

Ich möchte nur ein kurzes Update hinzufügen: Ich hatte 2 virtuelle Envs in Conda, beide mit MKL. Einer von ihnen ist mit numpy 1.11.1 und der andere ist mit numpy 1.11.2 . Das Ausführen von otool -L zeigte an, dass beide irgendwie nicht libmkl_intel_lp64.dylib geladen hatten. Nachdem sichergestellt wurde, dass libmkl_intel_lp64.dylib geladen wurde, verschwand der Fehler in der virtuellen Umgebung mit numpy 1.11.2 . Der Fehler trat jedoch weiterhin in der Umgebung mit numpy 1.11.1 . Nach dem Upgrade von numpy auf 1.11.2 kann ich den Fehler in beiden virtuellen Umgebungen nicht mehr reproduzieren. Da es kompliziert klingt und die genaue Ursache des Fehlers immer noch unklar ist, spekuliere ich, dass es sich wahrscheinlich um eine Komplikation handelt, die durch unvollständiges Laden der MKL-Bibliothek und von Scikit-Learn abhängige Bibliotheken (möglicherweise numpy?) Verwoben ist. (Obwohl ich nicht versucht habe, eine virtuelle Umgebung mit MKL und numpy 1.11.1 zu erstellen, um zu sehen, ob dies den Fehler reproduzieren würde.)

Und ich mache einen zweiten Vorschlag von

@zhongyuk froh, dass du es

Das ist ein Conda-Bug, oder? Oder hat jemand den Fehler erlebt, keine Conda zu verwenden?

Ich habe es geschafft, einen Weg zu finden, mich zu reproduzieren, indem ich das Numpy-Rad installierte und dann über Conda darüber scikit-lernte (bekam den Hinweis von der Ausgabe von conda list in https://github.com/scikit- learn / scikit-learn / issue / 6665 # issuecomment-262800762, wo zwei numpy aufgelistet sind).

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

Führen Sie dann das Snippet von https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -262800762 aus.

Es scheint also so, als ob dies passiert, wenn Numpy über Pip und Conda installiert wird. In meinem Buch ist es nie eine gute Idee, pip und conda für ein bestimmtes Paket zu mischen, aber ich denke, dies kann passieren, ohne es ganz einfach zu realisieren (zum Beispiel installieren Sie ein Projekt, das von numpy via pip abhängt, und dann scikit-learn via conda ).

Warum genau das passiert, weiß ich nicht ... und es scheint übrigens nur unter OSX zu passieren (dh nicht auf meiner Ubuntu-Box).

Für alle, die davon betroffen sind, sollte dies Folgendes beheben:

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

Lassen Sie mich wissen, wenn das bei Ihnen nicht funktioniert.

Danke für den tiefen Tauchgang (wieder!) @Lesteve

Ich dachte, wir würden diesem nie auf den Grund gehen, um ehrlich zu sein :)! OK, es ist nicht ganz der Grund, aber für mich ist es niedrig genug.

Ich muss zugeben, dass ich immer noch gerne verstehen möchte, was in der mit pip und conda installierten Zahl passiert ...

Hallo
Ich habe zwei Setups ausprobiert, wo

  • TSNE funktioniert jedoch gut mit einem Setup (bei dem Tensorflow deaktiviert ist, Python-3.x).

  • TSNE funktioniert nicht mit dem anderen Setup (wo Tensorflow aktiviert ist, Python 2.x).

Das Setup, in dem TSNE gut funktioniert:

Terminal:

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

Jupyer-Notizbuch:

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)]

Hinweis: Ich habe es versucht

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

damit TSNE bei deaktiviertem Tensorflow gut funktioniert.
Mit dem neuen Setup unten (wo ich Tensorflow verwenden muss) funktioniert dies jedoch nicht mehr.
——-————————————————————————————-

Die Einrichtung, bei der TSNE nicht funktioniert:

Terminal:

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

Jupyer-Notizbuch:

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)]

Fehler :
ValueError: array must not contain infs or NaNs

Irgendwelche Vorschläge ? Vielen Dank

Interessant. Ich denke, es hat nichts mit Tensorflow zu tun. Ich vermute das

[GCC 4.2.1-kompatibles Apple LLVM 4.2 (clang-425.0.28)]

vs.

[GCC 4.2.1-kompatibles Apple LLVM 6.0 (clang-600.0.57)]

ist der Täter!?

Danke für die Antwort :) Irgendwelche Lösungsvorschläge / to_do_list?

Benötigen Sie beide
Tensorflow und
TSNE
im Jupyter Notizbuch ....

Übrigens: Ich habe gerade "aus __future__ Import Division" in Python 2.x versucht und das Problem nicht gelöst.

Hm, ich bin mir nicht sicher, ob das hilft - persönlich bekomme ich dieses mysteriöse Problem nicht mehr

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

Ich bin auch auf Tf (jetzt 1.0) und ich habe dieses Error: ValueError: array must not contain infs or NaNs Problem nicht mehr, wenn ich es ausführe

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)

was vorher nicht funktioniert hat.

Versuchen Sie möglicherweise, eine neue Python 3.5-Umgebung zu erstellen, und versuchen Sie es mit dem oben genannten Snippet, um festzustellen, ob es fehlerfrei funktioniert:

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

Hallo rasbt,
Ja, ich habe TSNE für Python 3.5 arbeiten lassen.
Aus einem anderen Grund sollte ich jedoch besser Python 2.7 verwenden, also muss ich weiter erforschen ... Daumen drücken

Danke für Ihre Hilfe.

Haben Sie eine alte (er) Miniconda / Anaconda 2.7 Distribution installiert? In diesem Fall sollten Sie vielleicht eine der neueren installieren oder Ihre Conda-Wurzel oder Standard-Python aktualisieren und es erneut versuchen (oder eine neue py 27-Umgebung erstellen, indem Sie die 3,5 durch 2,7 in conda create -n yourenv python=3.5 numpy scipy scikit-learn ersetzen). (Ich bin mir nicht sicher, ob dies wirklich der Grund ist, aber ich denke, dass LLVM 4.2 (clang-425.0.28) ein Problem sein kann; da der Fehler nicht über [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] aufzutreten scheint)

Update: TSNE (Ratlosigkeit = 30, n_Komponenten = 2, init = 'pca', n_iter = 1000, Methode = 'genau' ) macht es möglich ...
Methode = 'genau' war der Trick.

Hatte auch dieses Problem. Die Verwendung von method = 'genau' scheint für mich zu funktionieren, ist aber so schmerzhaft langsam. Gibt es wirklich keine andere Lösung, die die Leute gefunden haben?

Haben Sie https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -264029983 und https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -264087057 gelesen? ?

Die einzige Möglichkeit, dieses Problem zu reproduzieren, bestand darin, numpy mit pip und conda in derselben Conda-Umgebung zu installieren. Wenn Sie eine Conda-Umgebung von Grund auf neu erstellen, sollten Sie dieses Problem nicht haben.

Falls Ihr Problem nicht mit dieser Beschreibung übereinstimmt, geben Sie bitte die genauen Befehle ein, die Sie zum Erstellen Ihrer Conda-Umgebung ausgeführt haben, damit wir versuchen können, sie zu reproduzieren.

Hallo,
Ich habe die obigen Kommentare gelesen und kann diese reproduzieren. Ich habe den Code von vor einigen Wochen erneut ausgeführt und jetzt tritt dieses Problem auf. Hier ist ein minimales Beispiel, das dieses Problem jetzt reproduziert:

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

Und die Ausgabe von

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__)

ist

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

Auch hier wird der Fehler behoben, wenn die Methode auf genau ( TSNE(method='exact') ) geändert wird.

Generell habe ich bei der Verwendung von sklearns TSNE (mit identischer Ratlosigkeit und anderen Parametern) ganz andere Ergebnisse festgestellt als bei der von Laurens van der Maaten veröffentlichten bh-Implementierung und der MATLAB-Version. Ich frage mich, ob möglicherweise eine Verbindung besteht.

Das hat es behoben. Ich entschuldige mich - ich hatte eine neu installierte numpy, scikit learn und scipy separat deinstalliert, aber nicht wie in 6665.

Ich hatte das gleiche Problem wie hier berichtet, und ich benutze keine Conda.

Meine Python-Version wird über Brew unter macOS Sierra 10.12.4 installiert

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

Das Hinzufügen von mode='exact' mein Problem gelöst.

@lesteve : Ich hatte diesen Fehler mit dem von Ihnen beschriebenen Setup (zwei Versionen von numpy installiert). Das einfache Aktualisieren der Conda-Installation von numpy auf dieselbe Version wie die Pip-Installation (1.12.1) hat mir geholfen. Ich habe die Pip Numpy Installation entfernt, da ich nicht zwei Versionen haben wollte :)

@lesteve : Danke für die Lösung! Ich hatte zufällig diesen Fehler und fand dann diese Diskussion. Beheben Sie das Problem sofort, nachdem Sie die duplizierte Version von numpy entfernt haben.

Repliziert Ich habe Pip-Installationen von Numpy entfernt und Conda aktualisiert.

Darwin-16.7.0-x86_64-i386-64bit
('Python', '2.7.13 | Anaconda custom (x86_64) | (Standard, 20. Dezember 2016, 23:05:08) \ n [GCC 4.2.1-kompatibles Apple LLVM 6.0 (clang-600.0.57)]')
('NumPy', '1.13.1')
('SciPy', '0.19.0')
('Scikit-Learn', '0.18.1')

Auf meinem Linux-Rechner Linux scheint es in Ordnung zu sein:
Linux-3.0.101-0.47.71-default-x86_64-with-SuSE-11-x86_64
('Python', '2.7.12 | Anaconda 2.3.0 (64-Bit) | (Standard, 2. Juli 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, also hast du es getan

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

Etwas verwandt Ich empfehle Ihnen, auf scikit-learn 0.19 zu aktualisieren, das einige Korrekturen in t-SNE enthält

jetzt den gleichen Fehler bekommen

Hallo @rahulsnair , macht es Ihnen etwas aus, eine neue Ausgabe mit reproduzierbarem Code, Ihrem Traceback und den von Ihnen verwendeten Versionen zu eröffnen? Dieses Problem ist ziemlich alt und der Code hat sich stark verändert. Vielen Dank!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen