Je suis récemment tombé sur tf.nn.sparse_softmax_cross_entropy_with_logits et je ne peux pas comprendre quelle est la différence par rapport à tf.nn.softmax_cross_entropy_with_logits .
La seule différence est-elle que les vecteurs d'apprentissage y
doivent être encodés à chaud lors de l'utilisation sparse_softmax_cross_entropy_with_logits
?
En lisant l'API, je n'ai pas pu trouver d'autre différence par rapport à softmax_cross_entropy_with_logits
. Mais pourquoi avons-nous besoin de la fonction supplémentaire alors?
Ne devrait pas softmax_cross_entropy_with_logits
produire les mêmes résultats que sparse_softmax_cross_entropy_with_logits
s'il est fourni avec des données / vecteurs d'apprentissage encodés à chaud?
neural-network
tensorflow
softmax
cross-entropy
daniel451
la source
la source
Réponses:
Avoir deux fonctions différentes est une commodité , car elles produisent le même résultat.
La différence est simple:
sparse_softmax_cross_entropy_with_logits
, les étiquettes doivent avoir la forme [batch_size] et le dtype int32 ou int64. Chaque étiquette est un entier dans la plage[0, num_classes-1]
.softmax_cross_entropy_with_logits
, les étiquettes doivent avoir la forme [batch_size, num_classes] et dtype float32 ou float64.Les étiquettes utilisées dans
softmax_cross_entropy_with_logits
sont la seule version chaude des étiquettes utilisées danssparse_softmax_cross_entropy_with_logits
.Une autre petite différence est qu'avec
sparse_softmax_cross_entropy_with_logits
, vous pouvez donner -1 comme étiquette pour avoir une perte0
sur cette étiquette.la source
Je voudrais juste ajouter 2 choses à la réponse acceptée que vous pouvez également trouver dans la documentation TF.
Première:
Seconde:
la source
Les deux fonctions calculent les mêmes résultats et sparse_softmax_cross_entropy_with_logits calcule l'entropie croisée directement sur les étiquettes éparses au lieu de les convertir avec un encodage à chaud .
Vous pouvez le vérifier en exécutant le programme suivant:
Ici, je crée un
logits
vecteur aléatoire de longueurdims
et génère des étiquettes encodées à chaud (où l'élément danspos
est 1 et les autres sont 0).Après cela, je calcule softmax et softmax clairsemé et compare leur sortie. Essayez de le réexécuter plusieurs fois pour vous assurer qu'il produit toujours le même résultat
la source