Ich bin kürzlich auf tf.nn.sparse_softmax_cross_entropy_with_logits gestoßen und kann nicht herausfinden, was der Unterschied zu tf.nn.softmax_cross_entropy_with_logits ist .
Der einzige Unterschied ist, dass Trainingsvektoren y
sein one-hot kodierten bei der Verwendung sparse_softmax_cross_entropy_with_logits
?
Beim Lesen der API konnte ich keinen anderen Unterschied feststellen als softmax_cross_entropy_with_logits
. Aber warum brauchen wir dann die zusätzliche Funktion?
Sollte nicht softmax_cross_entropy_with_logits
die gleichen Ergebnisse liefern wie sparse_softmax_cross_entropy_with_logits
wenn es mit One-Hot-codierten Trainingsdaten / -vektoren geliefert wird?
neural-network
tensorflow
softmax
cross-entropy
daniel451
quelle
quelle
Antworten:
Es ist praktisch , zwei verschiedene Funktionen zu haben , da sie das gleiche Ergebnis liefern.
Der Unterschied ist einfach:
sparse_softmax_cross_entropy_with_logits
Etiketten müssen die Form haben [batch_size] und die dtype int32 oder int64. Jedes Etikett ist ein int im Bereich[0, num_classes-1]
.softmax_cross_entropy_with_logits
muss Etiketten haben die Form [batch_size, num_classes] und dtype float32 oder float64.Die in verwendeten Labels
softmax_cross_entropy_with_logits
sind die einzige heiße Version der in verwendeten Labelssparse_softmax_cross_entropy_with_logits
.Ein weiterer kleiner Unterschied ist, dass
sparse_softmax_cross_entropy_with_logits
Sie mit -1 als Etikett angeben können, um einen Verlust0
auf diesem Etikett zu haben.quelle
Ich möchte der akzeptierten Antwort nur zwei Dinge hinzufügen, die Sie auch in der TF-Dokumentation finden.
Zuerst:
Zweite:
quelle
Beide Funktionen berechnen die gleichen Ergebnisse und sparse_softmax_cross_entropy_with_logits berechnet die Kreuzentropie direkt auf den Sparse-Labels, anstatt sie mit One-Hot-Codierung zu konvertieren .
Sie können dies überprüfen, indem Sie das folgende Programm ausführen:
Hier erstelle ich einen zufälligen
logits
Längenvektordims
und generiere One-Hot-codierte Beschriftungen (wobei Element inpos
1 und andere 0 sind).Danach berechne ich Softmax und Sparse Softmax und vergleiche deren Ausgabe. Versuchen Sie es einige Male erneut, um sicherzustellen, dass immer die gleiche Ausgabe erzeugt wird
quelle