Scikit-learn: t-SNE échoue avec le tableau ne doit pas contenir d'infs ou de NaN (spécifique à OSX)

Créé le 15 avr. 2016  ·  108Commentaires  ·  Source: 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')

Lorsque vous essayez d'exécuter un t-SNE

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

toutefois

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

Trace complète de la pile:


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

Commentaire le plus utile

Pour toute personne affectée par cela, cela devrait résoudre le problème:

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

Faites-moi savoir si cela ne fonctionne pas pour vous.

Tous les 108 commentaires

Idem avec ('Scikit-Learn', '0.18.dev0')

Voulez-vous partager vos données X avec moi?

Bien sûr, où et dans quel format l'aimeriez-vous?

Le 17 avril 2016, à 09:11, 康 洋[email protected] a écrit:

Voulez-vous partager vos données X avec moi?

-
Vous recevez ceci parce que vous avez créé le fil.
Répondez directement à cet e-mail ou consultez-le sur GitHub https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -210968577

Mon email est [email protected]
Comme je le sais, il existe une fonction numpy.save pour enregistrer un tableau dans un fichier binaire au format .npy ~~

Je teste vos données dans ubuntu 14.04 LTS avec
Python == 2.7.6
scikit-learn == 0.17.1
numpy == 1.8.2
scipy == 0.13.3
C'est bien et ne lève pas ValueError. Le code de test est:
`importer numpy
a = numpy.load ('/ racine / test.npy')
imprimer une forme
print numpy.isnan (a) .all () #False
print numpy.isfinite (a) .all () #Vrai
print numpy.isinf (a) .all () #False

depuis sklearn.manifold import TSNE
proj = TSNE (). fit_transform (a) # [[2.35503527e + 00 1.15976751e + 01] .... [3.29832591e + 00 8.98212513e + 00]]
imprimer le projet


Ensuite, je mets à niveau numpy, scipy vers 1.11.0, 0.17.0 et teste avec le même code et cela ne génère aucune erreur.

Reproduit pour 3.5 avec anaconda sous 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

Exemple d'exécution:

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

Merci @ ivan-krukov, mais je ne parviens pas à répliquer en Python 3.3. Essayera 3.5

Cela ne s'applique pas à linux (4.4.0-21, Ubuntu 16.04) avec les mêmes packages sous 3.5.

Je suis sur El-Capitan, mais je ne parviens pas à mettre en place une installation Python 3.5.

Y a-t-il une mise à jour à ce sujet?

J'ai le problème sur un de mes ensembles de données, sur Anaconda, Py 3.5, sklearn 0.17.1, OSX El Capitan.
Je peux reproduire l'erreur avec l'exemple fourni par @ ivan-krukov.

Même problème. Python 2.7.6 sur OS X El Capitan sur 0.17. J'ai essayé le même code sur Linux en utilisant Python 2.7.6 et 0.17, et cela fonctionne.

Même problème.
OSX El Capitan Python 3.5.1
scikit-learn == 0.17.1
scipy == 0.17.1

J'ai le même problème et j'apprécierais vraiment une solution (ou une solution de contournement?)
Version du système: 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

Je peux également reproduire le bogue avec l'exemple de code de ivan-krukov

Même problème sur OS X EI Capitan en utilisant Python 3.5

Version du système: OS X 10.11.5
Python 3.5.1 :: Continuum Analytics, Inc.
engourdi. version 1.11.1
scipy. version 0.16.0
sklearn. version 0.17.1

Même problème. Bien que j'ai remarqué que cela ne se produit que pour un sous-ensemble de mon ensemble de données et non avec le tout . Autrement dit, si je fais TSNE sur l'ensemble de données, cela fonctionne , si je le fais sur un ensemble réduit, ce n'est pas le cas.

O_o ;; Ceci juste dans, si je répète le même sous-ensemble «cassé» qui ne fonctionne pas (au moyen de la liste * 10) alors cela fonctionne. La multiplication de chaque vecteur individuel par 10 ne fonctionne pas, mais la duplication de la date fonctionne. il ne suffit pas de doubler la longueur de la liste. Peut-être s'agit-il d'une sorte de contrôle des degrés de liberté folle?

@ ivan-krukov J'ai mordu la balle aujourd'hui et installé une machine virtuelle El Capitan. Malheureusement, je ne peux pas reproduire votre problème.

@Concomitant pouvez-vous reproduire l'erreur sur l'exemple autonome donné dans https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -218365487?

Je suis sur El-Capitan, mais je ne parviens pas à mettre en place une installation Python 3.5.

@jnothman, cela ne semble pas se produire uniquement sur Python 3.5, donc si vous pouviez essayer de reproduire avec Python 2.7 (extrait: https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment-218365487 ) ce serait génial.

@lesteve Je peux reproduire le problème.

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

En suivant le même code, cependant:

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

Bizarre.

Je ne peux pas non plus reproduire avec python 3.5.1, numpy 1.11.1, scipy 0.17.1 et scikit-learn 0.17.1 de miniconda (avec MKL) sur une virtualbox avec OSX El Capitan. J'essaierai un vrai matériel mac plus tard.

Aussi @joelkuiper et @Concomitant pouvez-vous vérifier que vous pouvez reproduire le problème sur l'état actuel de la branche master scikit-learn?

@lesteve et autres Je ne peux pas reproduire l'erreur avec l' extrait posté plus tôt sur le dernier maître avec python 2.7.

Information système:

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

J'ai essayé à nouveau sur un vrai mac exécutant OSX El Capitan 10.11.3 (avec les derniers numpy scipy et scikit-learn d'anaconda, même paramètre que celui rapporté par @Concomitant dans https://github.com/scikit-learn/scikit-learn/issues / 6665 # issuecomment-229703129) mais n'a pas pu reproduire le problème non plus (j'ai essayé d'exécuter l'extrait plusieurs fois).

Ce qui est bizarre, c'est que malgré la ligne np.random.seed(1) j'obtiens des résultats différents pour la sortie de fit_transform . Cela pourrait être un bug en soi.

Ce qui est étrange, c'est que malgré la ligne np.random.seed (1), j'obtiens des résultats différents pour la sortie de fit_transform. Cela pourrait être un bug en soi.

En fait, j'ai lu l' extrait de code de random.seed(1) il devrait être np.random.seed(1) sinon le RNG numpy n'est pas réensemencé correctement et on ne peut pas obtenir de résultats déterministes.

Je me suis aussi rendu compte que j'avais lu toute la discussion trop rapidement et que le bogue ne se produisait qu'avec python 2.7. Je vais essayer à nouveau.

Je ne peux pas non plus reproduire avec python 2.7.12 de conda sur OSX 10.11.3.

En fait, @Ekliptor peut reproduire le problème avec python 3.5.1 à partir de conda, il n'est donc probablement pas lié à la version de Python non plus. Cela dépend peut-être de la version mineure d'OSX. Va mettre à jour et réessayer.

Je ne peux pas répliquer non plus avec OSX 10.11.5. J'ai essayé les deux avec Python 2.7.12 et 3.5.2 installés avec conda avec numpy 1.11.1, scipy 0.17.1 et scikit-learn 0.17.1.

Je ne sais pas quoi faire. Si l'un de vous peut reproduire le problème, essayez de trouver une graine aléatoire numpy qui déclenche le problème (en utilisant np.random.seed(my_seed) au lieu de random.seed(1) dans l'extrait ci-dessus) et communiquez la valeur ici (avec la version d'OSX et vos packages python).

Je peux confirmer que le problème est résolu avec la dernière version. Je ne peux plus le reproduire comme avant.
J'ai seulement mis à jour numpy:
numpy.version.version 1.11.1

À toutes les personnes travaillant avec Tensorflow, je peux ajouter:
Lorsque j'essaie de tracer un très petit échantillon (<200 points), je rencontre parfois encore cette erreur. Après avoir augmenté la taille de l'échantillon, je passe dans tsne.fit_transform () cela fonctionne toujours.

Merci @Ekliptor d' avoir vérifié qu'il fonctionne avec scikit-learn master. @joelkuiper et @Concomitant confirmez-vous que scikit-learn master fonctionne également pour vous? Si tel est le cas, nous pouvons fermer ce problème.

J'ai installé master, l'extrait de code fonctionne maintenant proprement.

semble fonctionner pour tout le monde maintenant. fermeture.

Désolé, mais j'obtiens toujours cela sur Python 3.5.1, scikit 0.17, scikit-learn 0.18 (commit 9e913c04d748) et Numpy 1.11.1 sur Mac OS 10.11.5.

@dmyersturnbull obtenez -vous l'erreur lors de l'exécution de l'extrait de https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -218365487?

@lesteve que j'ai fait avec cet extrait de

J'ai le même problème avec Python 3.5.2, scikit-learn 0.17.1, scipy 0.17.1, numpy 1.11.1 sur Mac OS X El Capitan 10.11.3. Cela fonctionne lorsque j'ai plus de 2100 points mais échoue pour des valeurs inférieures.

J'ai le même problème avec Python 3.5.2, scikit-learn 0.17.1, scipy 0.17.1, numpy 1.11.1 sur Mac OS X El Capitan 10.11.3. Cela fonctionne lorsque j'ai plus de 2100 points mais échoue pour des valeurs inférieures.

Échec analogique pour les valeurs des points bas

Rouvrir, s'il vous plaît

J'obtiens le même problème sur OS X 10.11.6, python 3.5.1, sklearn 0.17.1 et numpy 1.11.1.
Sur cet ensemble de données: https://dl.dropboxusercontent.com/u/103591/vals.out (avec np.savetxt)

Échec analogique pour les valeurs des points bas

@Lucidyan Je ne comprends pas ce que vous entendez par là.

J'obtiens le même problème sur OS X 10.11.6, python 3.5.1, sklearn 0.17.1 et numpy 1.11.1.
Sur cet ensemble de données: https://dl.dropboxusercontent.com/u/103591/vals.out (avec np.savetxt)

@pbnsilva pouvez-vous essayer cet extrait ci-dessous? Vous devrez peut-être l'exécuter plusieurs fois car malheureusement, la valeur de départ n'est pas définie correctement (vous devez utiliser np.random.seed plutôt que 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)

Des points bonus si vous pouvez trouver un argument de départ à np.random.seed et un argument random_state à TSNE qui rend l'extrait de code déterministe.

Alternativement, certaines personnes ont signalé que ce bogue a été corrigé dans master. Pourriez-vous essayer de construire scikit-learn master pour voir si le problème disparaît?

@lesteve Je voulais dire que j'obtiens la même erreur avec un petit nombre d'instances, avec les mêmes paramètres système (Python 3.5.2, scikit-learn 0.17.1, scipy 0.17.1, numpy 1.11.1 sous Mac OS X El Capitan 10.11.3)

@pbnsilva pouvez-vous essayer cet extrait ci-dessous? Vous devrez peut-être l'exécuter plusieurs fois car malheureusement, la valeur de départ n'est pas définie de manière appropriée (vous devez utiliser np.random.seed plutôt que random.seed).

Je l'ai essayé, et cela échoue avec X_SIZE <= 1750 (Y_SIZE = 20, n_components = 2 sont devenus des constantes). si je commence à changer les constantes (augmentation) avec X_SIZE = 1750 fixe, cela échoue aussi.

@Lucidyan pourriez-vous essayer le même extrait de code avec scikit-learn master et voir s'il échoue également?

oui ne fonctionne pas pour moi (numpy 1.11.1, El capitan.10.11, sklearn 0.17.1, python 3.5.2) ennuyeusement, il a brisé l'ancien code qui fonctionnait. qu'avez-vous changé les gars ...?

@ act65, nous sommes plus que désireux d'aller au fond des

Donc, si vous ne l'avez pas déjà fait (malheureusement, nous ne sommes pas des lecteurs d'esprit et "ne pas travailler pour moi" ne nous dit pas ce que vous avez essayé) pouvez-vous essayer d'exécuter l'extrait mentionné ci-dessus sur https://github.com/scikit-learn / scikit-learn / issues / 6665 # issuecomment -243782185. Essayez de l'exécuter plusieurs fois au cas où la valeur de départ aléatoire ne serait pas définie correctement et qu'il pourrait rester un peu aléatoire dans l'extrait de code.

Alors, qu'est-ce qui serait vraiment génial si vous pouviez essayer avec la version 0.18 candidate qui est simple à installer (fortement recommandée de le faire dans un environnement virtualenv ou conda séparé):

pip install --pre scikit-learn -U

Modifié: 0.18 a été publié afin que vous puissiez simplement utiliser (pas besoin d'utiliser --pre ):

pip install scikit-learn -U

et réexécutez l'extrait pour voir s'il est corrigé dans la version 0.18, comme certains utilisateurs l'ont déjà signalé dans ce fil de discussion.

0.18 va sortir dans quelques semaines, voire quelques jours, donc vous savez ce que vous devez faire si vous voulez nous aider à aller au fond des choses avant la sortie ;-).

oui mon mal, aurait dû être plus clair. (J'avais essayé à peu près la même chose que les autres, juste sur MNIST).

de toute façon, ça marche! Merci :)
pip install --pre scikit-learn -U corrigé

OK, merci pour votre rapport et super d'entendre que cela est corrigé pour vous dans la version 0.18 candidate! Cela semble correspondre à ce que d'autres ont rapporté lorsqu'ils disent que cela a été corrigé dans master.

Cependant, pour être complet, il est recommandé de s'en tenir aux versions publiées pour le code de production, vous devrez donc peut-être attendre un peu plus jusqu'à la sortie de la version 0.18.

@lesteve
J'ai essayé l' extrait sur la version 0.18rc2, installé par

pip install --pre scikit-learn -U

Et cela semble fonctionner! À votre santé!

Merci @Lucidyan de l'avoir essayé.

Désolé, j'obtiens toujours cette erreur avec l'extrait de code ci-dessus après la mise à niveau vers scikit-learn 0.18 ( pip install --pre scikit-learn -U ) dans conda env.

Voici mes informations système:
OS X El Capitan version 10.11.4
Python 2.7.12
sklearn 0.18 (a obtenu la même erreur sur sklearn 0.17.1 également)
numpy 1.11.1 (a également obtenu la même erreur sur numpy 1.11.2)
scipy 0.18.1

Cependant, j'ai exécuté le même extrait de code sur le système Linux, je n'ai pas eu d'erreur.
Les informations système du système Linux sont:
Ubuntu 14.04.5 LTS (GNU / Linux 3.13.0-91-générique x86_64)
Python 2.7.6
sklearn 0,18
numpy 1.11.2
scipy 0.13.3

Essayez de désinstaller et de réinstaller numpy, scipy et scikit-learn. Si cela échoue toujours, essayez dans un autre environnement virtualenv (ou conda si vous utilisez conda) pour vous assurer que quelque chose ne va pas dans votre environnement Python.

Toujours obtenir la même erreur ( ValueError: array must not contain infs or NaNs ) dans sklearn 0.18 ( 0.18-np111py35_0 ) via conda. Les roues de pip semblent bien fonctionner cependant!

Toujours obtenir la même erreur (ValueError: le tableau ne doit pas contenir infs ou NaNs) dans sklearn 0.18 (0.18-np111py35_0) via conda. Les roues de pip semblent bien fonctionner cependant!

Hmmm intéressant ... pourriez-vous essayer d'utiliser des packages conda sans mkl, c'est-à-dire quelque chose comme conda create -n sklearn_nomkl python scikit-learn nomkl pour que nous puissions voir si c'est une chose MKL vs openblas?

Aussi des points bonus si vous pouvez fournir un extrait de code reproduisant le problème avec une graine aléatoire fixe (c'est-à-dire en utilisant np.random.RandomState(some_int) ) qui peut être utilisé comme un extrait de code à l'avenir. Jusqu'à présent, l'extrait de code que nous avons n'est pas déterministe ( random.seed est utilisé et n'a aucune influence sur numpy.random seed).

Bien sûr pas de problème. Cela peut être un problème BLAS en effet, le conda create -n sklearn_nomkl python scikit-learn nomkl env fonctionne très bien.

En ce qui concerne l'extrait de code ... cela devient intéressant. Par exemple,

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)

reproduit le problème sur ma machine. Cependant, quand je remplace digits_tsne_train = tsne.fit_transform(X_train) par digits_tsne_train = tsne.fit_transform(digits.data) cela semble aller. Il serait bon de trouver peut-être un exemple plus léger, d'ajouter ce cas particulier aux tests de travis.

EDIT: Il en va de même pour l'iris. iris.data fonctionne dans fit_transform, un jeu de données fractionné ( X_train ) ne le fait pas. Peut-être qu'il se passe quelque chose de drôle dans train_test_split . Cependant, X_train et iris.data semblent être des tableaux flottants de 64 ...

Qu'en est-il de l'extrait de https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -243782185, vous n'avez pas trouvé un moyen de le rendre déterministe et de toujours échouer sur votre machine?

L'extrait

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)

reproduit l'erreur (mais cela fonctionne très bien sur l'environnement nomkl)

OK merci beaucoup pour cela, au moins nous avons un extrait déterministe maintenant. Pour mémoire, pouvez-vous publier la sortie de cet extrait de code:

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

Aussi, juste pour des raisons de santé mentale, pouvez-vous vous assurer que vous pouvez reproduire le problème dans un nouvel environnement conda.

Pour être honnête, je ne sais pas trop où nous en sommes. Je n'ai pas essayé depuis mais je n'ai pas pu reproduire sur une boîte El Capital Virtual, @ogrisel ne pouvait pas non plus reproduire sur un ordinateur portable OSX, donc à l'époque, il a dit qu'il pourrait y avoir un problème spécifique au matériel.

Sûr,

la machine à l'origine de ce problème:

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

(testé dans un environnement de conda frais)

il peut y avoir un problème spécifique au matériel impliqué.

Je pense que vous êtes peut-être sur qc! Je l'ai essayé sur mon autre mac et cela fonctionne très bien là-bas. La seule différence est que la sortie ci-dessus s'exécute sur un noyau plus ancien ( Darwin-15.6.0-x86_64-i386-64bit ). Je n'ai pas encore mis à jour le deuxième mac vers macOS Sierra, qui s'exécute sur l'ancienne machine qui a ce problème. Cela pourrait être lié au système d'exploitation. Je mettrai à niveau la deuxième machine vers Sierra dans le mois prochain environ (je suis au milieu d'un projet et je ne veux pas casser les choses), mais je peux vous faire savoir si la mise à jour de Sierra conduit à ce problème sur le deuxième machine (ou peut-être que quelqu'un d'autre avec macOS Sierra pourrait le tester pour que nous puissions maintenant s'il s'agit d'un système d'exploitation)

Étant donné que le problème a été signalé sur différentes versions d'OSX, je doute qu'il ne s'agisse que d'un problème de version OSX. L' intuition de l' IIRC

Une autre façon (plus longue) de déboguer ce problème serait de localiser où les NaN apparaissent dans le code.

L' intuition de l' IIRC

Hm, en quoi la version conda scikit-learn diffère-t-elle des roues pip? Parce que ces derniers semblent fonctionner sur la même machine. Peut-être que c'est en quelque sorte lié au conda

Une autre façon (plus longue) de déboguer ce problème serait de localiser où les NaN apparaissent dans le code.

J'ai remarqué que le dégradé dans https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/manifold/t_sne.py#L387 explose, jusqu'à ce qu'il devienne -inf dans une position après la 25e itération de la 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
...

Sur l'autre machine (celle qui fonctionne bien), les dégradés sont tous <0 après la même itération. Donc, d'une manière ou d'une autre, la fonction _gradient_descent ne fonctionne pas correctement (peut-être à cause de quelque chose de BLAS).

Hm, en quoi la version conda scikit-learn diffère-t-elle des roues pip? Parce que ces derniers semblent fonctionner sur la même machine. Peut-être que c'est en quelque sorte lié au conda

Les roues pip utilisent OpenBLAS et vous n'avez pas le problème lorsque vous utilisez OpenBLAS avec conda (via l'astuce nomkl ), cela ressemble donc à un problème MKL, qui en plus est probablement spécifique au processeur.

Excellent travail pour déboguer le problème au fait! Des points bonus si vous parvenez à isoler davantage le problème (par exemple en décapant les données avant l'apparition de l'itération inf ). Le problème survient très probablement dans certains codes cython dans sklearn / manifold / _barnes_hut_tsne.pyx.

Ce numéro ne devrait-il pas être rouvert compte tenu des dernières découvertes? Je l'ai frappé aussi et j'ai également réussi à le dépasser avec l'astuce nomkl, mais je me sens comme un bug actif contre un bug fermé, non?

D'autres qui ont touché ceci: https://discussions.udacity.com/t/assignment-5-error-in-the-main-code-valueerror-array-must-not-contain-infs-or-nans/178187 /sept

Vous avez raison, réouverture. Celui-ci est sérieux, semble spécifique au matériel et aucun des développeurs principaux n'a pu le reproduire. La seule façon de résoudre ce problème est que les personnes ayant le problème investissent du temps dans le débogage du problème.

Excellent travail pour déboguer le problème au fait! Des points bonus si vous parvenez à isoler davantage le problème (par exemple en décapant les données avant l'apparition de l'itération inf). Le problème survient très probablement dans certains codes cython dans sklearn / manifold / _barnes_hut_tsne.pyx.

Je suis heureux de l'examiner plus en détail en décembre après toutes les échéances de novembre ... Cependant, même cela peut être davantage isolé, je suis curieux de savoir s'il existe une solution à un problème aussi spécifique au matériel. Peut-être que jusqu'à ce que cela soit complètement résolu, il peut être intéressant de lever une exception / avertissement plus spécifique si le dégradé contient des infs avec une note sur ce problème?

Je viens de créer un nouveau conda virtualenv et construit une version devp de sklearn à partir du code source fraîchement dérivé de la branche master sciki-learn, l'erreur a disparu. Le devp sklearn est-il construit à partir du code source en utilisant OpenBLAS au lieu de MKL?

Je suis heureux de l'examiner plus en détail en décembre après toutes les échéances de novembre ...

Ça sonne bien, merci beaucoup!

Cependant, même cela peut être davantage isolé, je suis curieux de savoir s'il existe un correctif pour un tel problème spécifique au matériel.

Pas sûr d'un correctif, on espère que nous pouvons changer notre code cython en un problème de contournement une fois que nous l'aurons isolé. Cela pourrait également être un problème openblas et ce serait formidable de le signaler en amont, d'autant plus que les roues utilisent openblas.

Peut-être que jusqu'à ce que cela soit complètement résolu, il peut être intéressant de lever une exception / avertissement plus spécifique si le dégradé contient des infs avec une note sur ce problème?

Ajouter quelques conseils au message d'erreur (uniquement sur OS X), semble être une bonne idée, mais je ne suis pas sûr de ce qu'il devrait dire, peut-être "envisagez d'utiliser conda et installez scikit-learn avec MKL" ou quelque chose comme ça.

Le devp sklearn est-il construit à partir du code source en utilisant OpenBLAS au lieu de MKL?

@zhongyuk dépend de la bibliothèque que vous avez installée. Une façon de savoir une fois que vous avez construit scikit-learn à partir des sources est d'exécuter l'équivalent de ldd (Google semble dire otool -L ) sur sklearn/cluster/_k_means.so (le nom sera différent si vous utilisez Python 3, c'est-à-dire quelque chose comme sklearn/cluster/_k_means.cpython-35m-x86_64-linux-gnu.so ). Sur ma machine Ubuntu par exemple, j'obtiens ceci:

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)

Ainsi, vous pouvez voir à partir de la troisième ligne, qu'il utilise MKL.

mais je ne suis pas sûr de ce qu'il devrait dire, peut-être "envisagez d'utiliser conda et installez scikit-learn avec MKL" ou quelque chose comme ça.

Je voulais juste écrire que je pense que vous l'avez renversé: les roues ont fonctionné et le problème ne s'est produit que lorsque je l'utilisais via conda avec MKL ... Maintenant, je pense que j'ai de bonnes nouvelles d'une certaine manière: je voulais juste réexécutez l'exemple ci-dessus qui a précédemment provoqué la confirmation de ce problème

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)

et je ne reçois plus ce problème. Je me souviens que j'ai réinstallé miniconda l'autre semaine en raison d'autres problèmes. Pensez-vous que cela pourrait être lié à un problème dans l'ancien conda? Ce serait formidable si d'autres personnes ayant ce problème pouvaient peut-être essayer de mettre à jour / réinstaller conda et vérifier si cela résout le problème pour elles. En attendant, je vais essayer de voir si je peux trouver un ancien état de sauvegarde pour savoir quelle version de conda j'avais installée précédemment. (en ce moment, j'ai conda 4.2.12)

Je veux juste dire que j'ai exécuté otool -L sur sklearn/manifold/_barnes_hut_tsne.so (je suppose que c'est le fichier compilé t_sne.py?), Il semble qu'il utilise bien BLAS. Et celui qui a généré une erreur semble utiliser MKL.

La version de conda que j'ai est 4.2.13, à la fois l'environnement qui lance l'erreur et l'environnement avec sklearn construit à la source (qui ne lance pas d'erreur) sont à l'intérieur de conda.

Hm, intéressant, donc ce n'est pas un problème de conda après tout alors ... Curieux de savoir pourquoi cela fonctionne pour moi maintenant: /
(tout ce que je peux penser qui a changé (sauf pour réinstaller conda) était le redémarrage: P)

Je voulais juste écrire que je pense que vous l'avez renversé: les roues ont fonctionné et le problème ne s'est produit que lorsque je l'utilisais via conda avec MKL

Ouais, désolé pour ça. Je vais modifier le titre du problème pour essayer de m'en souvenir pour la prochaine fois.

Hm, intéressant, donc ce n'est pas un problème de conda après tout alors ... Curieux de savoir pourquoi cela fonctionne pour moi maintenant: /
(tout ce que je peux penser qui a changé (sauf pour réinstaller conda) était le redémarrage: P)

Hmmm, devinez peut-être au hasard la version mkl, bien que si je crois que la sortie de conda info mkl la dernière version mkl (11.3.3) date du 13/05/2016.

@zhongyuk essaie de construire scikit-learn dans un environnement conda qui utilise mkl, je pense que cela devrait être suffisant pour que mkl soit pris en charge (probablement une bonne idée dans ce cas de faire make clean puis make in pour reconstruire à partir de zéro).

@lesteve J'ai construit scikit-learn dans deux environnements virtuels conda à partir du code source (branche 0.18 release), celui qui utilise MKL jette en effet l'erreur; celui qui utilise libBLAS ne jette pas d'erreur.

La sortie exécutant otool -L sur sklearn/manifold/_barnes_hut_tsne.so est ici (au cas où la version MKL vous donnerait un indice?)

`` @rpath/libmkl_intel_lp64.dylib (compatibilité version 0.0.0, version actuelle 0.0.0)
@ rpath / libmkl_intel_thread.dylib (compatibilité version 0.0.0, version actuelle 0.0.0)
@ rpath / libmkl_core.dylib (version de compatibilité 0.0.0, version actuelle 0.0.0)
@ rpath / libiomp5.dylib (compatibilité version 5.0.0, version actuelle 5.0.0)
/usr/lib/libSystem.B.dylib (compatibilité version 1.0.0, version actuelle 1226.10.1)

@zhongyuk super! Pour être complet, pouvez-vous publier la sortie de conda list '(mkl|cython|numpy|scipy)$' (dans votre environnement MKL conda)? Tant que nous y sommes, vos informations sur le processeur ( sysctl -n machdep.cpu.brand_string selon Google) et les informations sur votre plate-forme ( python -c 'import platform; print(platform.platform())' ) seraient formidables.

Ce qui serait vraiment génial, c'est de continuer là où @rabst s'est arrêté et d'isoler davantage le problème:
https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -258311980

Comme cela est lié à BLAS, j'ai l'impression que quelque chose ne va pas dans cette ligne, ce

@lesteve Sortie des informations sur l'environnement conda MKL:

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 

Informations sur le processeur: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Informations sur la plateforme: Darwin-15.4.0-x86_64-i386-64bit

Je vais examiner le problème de l'explosion du gradient que @rabst a trouvé dans l'autre commentaire et la ligne que vous avez soulignée cette semaine et / ou la semaine prochaine, je tiendrai tout le monde au courant des résultats intéressants.

@zhongyuk Si cela aide, j'ai une configuration très similaire (je ne peux plus reproduire le problème depuis la réinstallation de miniconda), sauf que j'ai macOS Sierra au lieu d'OS X El Capitan et que j'ai numpy 1.11.2 au lieu de 1.11.1 .

@rasbt hmm, je me demande si le problème disparaît dans Sierra ... Je ne veux pas encore mettre à niveau le système d'exploitation b / z Je pensais avoir lu quelque part que TensorFlow ne prend pas encore en charge Sierra (pourrait être erroné ou ne plus être vrai depuis que je ne me souviens plus où ni depuis combien de temps je l'ai lu)? Et je ne veux pas casser mes projets avec la dépendance TF

@zhongyuk Hm, je pense qu'il est peu probable que cela soit lié. Avant de réinstaller miniconda, j'avais également le problème dans macOS Sierra. PS: Tensorflow fonctionne bien pour moi sur Sierra, mais je ne fais que du processeur et du prototypage sur mes macs, donc je ne connais pas les problèmes de GPU liés à Sierra

@rasbt hmm, c'est bon de savoir que TF fonctionne bien sur Sierra. Voulez-vous exécuter otool -L sur le fichier sklearn/manifold/_barnes_hut_tsne.so de votre plate-forme pour voir quelle bibliothèque mathématique sklearn utilise en dessous? Au moins de cette façon, nous pourrions savoir si le problème a disparu après la réinstallation de miniconda est fondamentalement lié à la bibliothèque mathématique?

J'obtiens ce qui suit sur _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, c'est vraiment intéressant. Il utilise également MKL. Je ne connais pas assez la bibliothèque mathématique pour spéculer sur ce que cela signifie ... @lesteve pourra probablement en déduire plus?

J'ai remarqué que dans ma plate-forme libmkl_intel_lp64.dylib n'est pas chargé ... Est-ce possible que cela ait causé le problème?

WOW, oui! il est causé par libmkl_intel_lp64.dylib non chargé !!! J'ai trouvé ce fil sur le débordement de pile , puis j'ai exécuté conda install --debug mkl , puis j'ai exécuté otool -L sur le fichier sklearn/manifold/_barnes_hut_tsne.so , puis libmkl_intel_lp64.dylib chargé, et j'ai exécuté l'extrait de code , l'erreur est partie! Faites travailler cinq équipes! @rasbt

Si quelqu'un d'autre pouvait vérifier sur sa plate-forme et voir si l'erreur a disparu après s'être assuré que libmkl_intel_lp64.dylib est chargé, ce serait génial!

@lesteve Puisqu'il semble que beaucoup de personnes ont rencontré ce problème, et il semble que cela soit lié au fait que (une version de?) conda n'extrait pas les bibliothèques MKL complètes (ma compréhension de la situation jusqu'à présent), même si ce n'est pas un bug scikit-learn, je pense que soit ajouter une sorte de remarque ou d'avertissement ou des messages d'erreur aux utilisateurs (OS X) serait bien? De cette façon, au moins, ils peuvent vérifier si la bibliothèque MKL est entièrement extraite sur leur plate-forme, puis la réparer si ce n'est pas le cas?

@zhongyuk génial, heureux d'apprendre que vous avez pu le réduire! Espérons que ce n'est que le lien cassé / l'installation incomplète du libmkl_intel_lp64.dylib - ce serait génial (en termes de savoir ce qui se passe) :). Cela expliquerait également pourquoi cela fonctionne pour moi maintenant après avoir réinstallé Miniconda ... Ce serait génial si quelqu'un d'autre pouvait essayer le «correctif».

Si le libmkl_intel_lp64.dylib susmentionné causait vraiment ce problème, la question restante serait de savoir comment gérer cela dans scikit-learn. Je veux dire, ce "bug" est assez horrible et il peut être un peu difficile pour les gens de comprendre que c'est dû à libmkl_intel_lp64.dylib . Je n'injecterais probablement pas un "si le gradient contient une erreur de levée inf + message" dans le code de scikit-learn car cela pourrait être assez ennuyeux en termes de performances. Cependant, je pense que l'ajout d'une note ou d'un commentaire dans la documentation d'installation et / ou T-SNE serait une bonne idée.

Je veux juste ajouter une mise à jour rapide: j'avais 2 envs virtuels dans conda utilisant tous deux MKL. L'un d'eux est équipé de numpy 1.11.1 et l'autre est équipé de numpy 1.11.2 . L'exécution de otool -L indiquait que les deux n'avaient pas chargé libmkl_intel_lp64.dylib . Après s'être assuré que libmkl_intel_lp64.dylib chargé, l'erreur a disparu dans l'environnement virtuel avec numpy 1.11.2 . Cependant, l'erreur est restée apparaissant dans l'environnement avec numpy 1.11.1 . Après la mise numpy niveau de numpy 1.11.1 pour voir si cela reproduirait l'erreur.)

Et je seconde la suggestion @rasbt sur l'ajout d'une sorte de note, de commentaire ou de documentation!

@zhongyuk heureux que vous l'ayez réparé! Il semble que la réinstallation de packages avec conda puisse aider, mais j'ai peur qu'il ne semble pas y avoir une image très claire de la cause du problème :(.

C'est un bug de conda, non? Ou est-ce que quelqu'un a rencontré le bogue sans utiliser conda?

J'ai réussi à trouver un moyen de reproduire je pense en installant la roue numpy, puis scikit-learn via conda dessus (j'ai obtenu l'indice de la sortie conda list dans https://github.com/scikit- learn / scikit-learn / issues / 6665 # issuecomment-262800762 où deux numpy sont répertoriés).

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

puis exécutez l'extrait de https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -262800762.

Il semble donc que cela se produise lors du mixage de numpy installé via pip et conda. Dans mon livre, ce n'est jamais une bonne idée de mélanger pip et conda pour un paquet donné mais je suppose que cela peut arriver sans s'en rendre compte assez facilement (par exemple, vous installez un projet qui dépend de numpy via pip, puis scikit-learn via conda ).

Pourquoi cela se produit exactement, je ne sais pas ... et cela ne semble se produire que sur OSX (c'est-à-dire pas sur ma boîte Ubuntu).

Pour toute personne affectée par cela, cela devrait résoudre le problème:

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

Faites-moi savoir si cela ne fonctionne pas pour vous.

Merci pour la plongée profonde (encore!) @Lesteve

Je pensais que nous n'allions jamais aller au fond de celui-ci pour être honnête :)! OK ce n'est pas tout à fait le fond mais c'est assez bas en ce qui me concerne.

Je dois admettre que j'aimerais toujours comprendre ce qui se passe dans le numpy installé avec pip et conda ...

salut
J'ai essayé deux configurations, où

  • TSNE fonctionne bien avec une configuration (où Tensorflow est désactivé, Python-3.x), cependant,

  • TSNE ne fonctionne pas avec l'autre configuration (où Tensorflow est activé, Python 2.x).

La configuration où TSNE fonctionne bien:

Terminal:

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

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

Remarque: j'ai essayé

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

pour que TSNE fonctionne correctement avec Tensorflow désactivé.
Cependant, avec la nouvelle configuration ci-dessous (où je dois utiliser Tensorflow), cela ne fonctionne plus.
——-———-———-———-———-———-———-———-

La configuration où TSNE ne fonctionne pas:

Terminal:

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

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

Erreur :
ValueError: array must not contain infs or NaNs

Aucune suggestion ? Merci beaucoup

Intéressant. Je pense que cela n'a rien à voir avec le tensorflow; je suppose que

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

contre

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

est le coupable!?

Merci pour la réponse :) Des suggestions de solutions / to_do_list?

Besoin d'utiliser les deux
Tensorflow et
TSNE
dans le cahier Jupyter ....

BTW: vient d'essayer "from __future__ import division" dans Python 2.x et n'a pas résolu le problème.

Hm, je ne sais pas si cela aide - personnellement, je ne reçois plus ce problème mystérieux avec

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

Je suis également sur Tf (maintenant 1.0), et je n'ai plus ce problème Error: ValueError: array must not contain infs or NaNs lorsque j'exécute

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)

qui auparavant ne fonctionnait pas.

Essayez peut-être de créer un nouvel env python 3.5 et essayez l'extrait de code ci-dessus pour voir s'il fonctionne sans erreur:

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

Salut rasbt,
Oui, j'ai fait fonctionner TSNE sur Python 3.5.
Cependant, pour une autre raison, je ferais mieux d'utiliser Python 2.7, je dois donc continuer à explorer ... croiser les doigts

Merci de votre aide.

Avez-vous une ancienne (er) distro Miniconda / Anaconda 2.7 installée? Dans ce cas, envisagez peut-être d'installer l'un des plus récents, ou mettez à jour votre racine de conda ou python par défaut et réessayez (ou créez un nouvel env py 27 en remplaçant le 3,5 par 2,7 dans conda create -n yourenv python=3.5 numpy scipy scikit-learn )? (je ne sais pas si c'est vraiment la raison, mais je pense que LLVM 4.2 (clang-425.0.28) peut être un problème; puisque l'erreur ne semble pas se produire via [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] )

Mise à jour: TSNE (perplexité = 30, n_composants = 2, init = 'pca', n_iter = 1000, method = 'exact' ) le fait fonctionner ...
method = 'exact' était l'astuce.

J'ai également eu ce problème. Utiliser method = 'exact' semble fonctionner pour moi, mais c'est tellement lent. N'y a-t-il pas vraiment d'autre solution que les gens aient trouvée?

Avez-vous lu https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -264029983 et https://github.com/scikit-learn/scikit-learn/issues/6665#issuecomment -264087057 ?

La seule façon dont j'ai réussi à reproduire ce problème était d'installer numpy avec pip et conda dans le même environnement conda. Si vous créez un environnement conda à partir de zéro, vous ne devriez pas avoir ce problème.

Au cas où votre problème ne semble pas correspondre à cette description, veuillez poster les commandes exactes que vous avez exécutées pour créer votre environnement conda, afin que nous puissions essayer de reproduire.

Salut,
J'ai lu les commentaires ci-dessus et je peux le reproduire. J'ai relancé le code d'il y a quelques semaines et maintenant ce problème apparaît. Voici un exemple minimal qui reproduit maintenant ce problème:

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

Et la sortie de

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

est

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

Encore une fois, changer la méthode en exact ( TSNE(method='exact') ) élimine l'erreur.

Plus généralement, j'ai remarqué des résultats très différents lors de l'utilisation du TSNE de sklearn (avec une perplexité identique et d'autres paramètres) de l'implémentation bh publiée par Laurens van der Maaten et de la version MATLAB. Je me demande s'il peut y avoir une connexion?

Cela a réglé le problème. Mes excuses - j'avais désinstallé séparément un numpy, scikit learn et scipy réinstallé, mais pas comme dans 6665.

J'ai eu le même problème que celui rapporté ici, et je n'utilise pas conda.

Ma version Python est installée via brew sur macOS Sierra 10.12.4

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

L'ajout de mode='exact' résolu mon problème.

@lesteve : j'ai eu cette erreur en utilisant la configuration que vous décrivez (deux versions de numpy installées). la simple mise à jour de l'installation conda de numpy vers la même version que l'installation pip (1.12.1) a fait l'affaire pour moi. J'ai cependant supprimé l'installation de pip numpy, car je n'avais pas l'intention d'avoir deux versions :)

@lesteve : Merci pour la solution! J'ai eu cette erreur et j'ai trouvé cette discussion. Corrigez-le tout de suite après avoir supprimé la version dupliquée de numpy.

Répliqué, j'ai supprimé les installations pip de numpy et mis à jour conda.

Darwin-16.7.0-x86_64-i386-64bit
('Python', '2.7.13 | Anaconda custom (x86_64) | (par défaut, 20 décembre 2016, 23:05:08) \ n [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]')
('NumPy', '1.13.1')
("SciPy", "0.19.0")
('Scikit-Learn', '0.18.1')

Cela semble bien sur ma machine Linux Linux:
Linux-3.0.101-0.47.71-default-x86_64-avec-SuSE-11-x86_64
('Python', '2.7.12 | Anaconda 2.3.0 (64 bits) | (par défaut, 2 juillet 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 donc vous l'avez fait

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

Un peu lié, je vous recommande de mettre à jour vers scikit-learn 0.19 qui a quelques corrections dans t-SNE

obtenir la même erreur maintenant

Bonjour @rahulsnair , cela vous dérange-t-il d'ouvrir un nouveau numéro, avec du code reproductible, votre traceback et les versions que vous utilisez? Ce problème est assez ancien et le code a beaucoup changé. Merci!

Cette page vous a été utile?
0 / 5 - 0 notes