2016-06-12 2 views

Répondre

-1

Dans la version tête (à ce jour), vous pouvez trouver la fonction dans https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py ligne 424.

Le commentaire dit:

mesure l'erreur de probabilité dans les tâches de classification discrètes que les classes sont mutuellement exclusives (chaque entrée est exactement une classe). Par exemple, chaque image CIFAR-10 est étiquetée avec un et une seule étiquette: une image peut être un chien ou un camion, mais pas les deux.

0

La partie la plus importante de la mise en œuvre est here à partir de la ligne 132.

Ce foncteur est appelé par le kernel implementation.

Il utilise une fonctionnalité peu documentée des générateurs appelés Eigen qui permettent d'écrire du code assez flexible et de le compiler à la fois pour le CPU et le nvcc pour le GPU.

0

sparse_softmax_cross_entropy_with_logits est équivalente à une version stable numériquement des éléments suivants:

-1. * tf.gather(tf.log(tf.nn.softmax(logits)), target)

ou, plus numpy code "lisible":

-1. * np.log(softmax(logits))[target]

softmax(x) = np.exp(x)/np.sum(np.exp(x)). C'est-à-dire, il calcule le softmax des logits fournis, prend le log de celui-ci pour récupérer les log-probabilités, et tranche les log-probabilités pour récupérer la probabilité de log de la cible. Cependant, il le fait d'une manière numériquement stable (quelques choses peuvent mal se passer ici) en ajoutant de petites valeurs à certaines des opérations. Cela signifie que le calcul de la version ci-dessus - verbose - aboutira seulement approximativement aux mêmes valeurs que nn.sparse_softmax_cross_entropy_with_logits (l'exécution de certains tests a montré que la différence est toujours plus petite que 2e-6).