Was ist logits, softmax und softmax_cross_entropy_with_logits?
Ging ich durch die tensorflow API-docs hier. In der tensorflow Dokumentation, nutzten Sie ein Stichwort genannt logits
. Was ist es? In eine Menge von Methoden, die in den API-docs steht geschrieben wie
tf.nn.softmax(logits, name=None)
Wenn das, was geschrieben ist, ist diese logits
sind nur Tensors
, warum halten Sie einen anderen Namen wie logits
?
Andere Sache ist, dass es zwei Methoden, ich könnte nicht differenzieren. Sie waren
tf.nn.softmax(logits, name=None)
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)
Was sind die Unterschiede zwischen Ihnen? Die docs sind mir nicht klar. Ich weiß, was tf.nn.softmax
tut. Aber nicht die anderen. Ein Beispiel soll das wirklich hilfreich ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Logits bedeutet einfach, dass die Funktion arbeitet auf die nicht skalierte Ausgabe der älteren Schichten, und dass die relative Skala zu verstehen, die Einheiten linear ist. Es bedeutet, in der insbesondere die Summe der Eingaben dürfen nicht gleich 1 sein, dass die Werte nicht Wahrscheinlichkeiten Sie haben könnten, einen input von 5).
tf.nn.softmax
produziert nur das Ergebnis der Anwendung der softmax-Funktion, um eine input-tensor. Die softmax "squishes" die Eingänge, so dasssum(input) = 1
: es ist ein Weg der Normalisierung. Die Form der Ausgabe einer softmax ist der gleiche wie der Eingang: es normalisiert die Werte. Die Ausgänge der softmax kann interpretiert werden als Wahrscheinlichkeiten.Im Gegensatz dazu
tf.nn.softmax_cross_entropy_with_logits
berechnet die cross Entropie des Ergebnisses nach Anwendung der softmax-Funktion (aber es tut es alle zusammen in einem mehr mathematisch vorsichtig Weg). Es ist ähnlich dem Ergebnis:Die cross Entropie ist eine Zusammenfassung Metrik: es werden Summen über die Elemente. Die Ausgabe von
tf.nn.softmax_cross_entropy_with_logits
auf eine Form[2,5]
tensor ist von der Form[2,1]
(die erste dimension behandelt die batch).Wenn Sie wollen, um die Optimierung zur Minimierung der cross Entropie UND du bist softmaxing, nachdem Sie Ihre Letzte Schicht, die Sie verwenden sollten
tf.nn.softmax_cross_entropy_with_logits
zu tun, anstatt es selbst, denn es deckt numerisch instabil Ecke Fälle in der mathematisch richtige Weg. Andernfalls werden Sie am Ende hacken Sie durch Zugabe von wenig epsilons hier und da.Bearbeitet 2016-02-07:
Wenn Sie single-class-labels, wo ein Objekt kann nur gehören zu einer Klasse, Sie könnten jetzt überlegen, mit
tf.nn.sparse_softmax_cross_entropy_with_logits
so dass Sie nicht haben, um konvertieren Sie Ihre Etiketten mit einem dichten one-hot-array. Diese Funktion wurde Hinzugefügt, nach dem release 0.6.0.cross_entropy = tf.nn.softmax_cross_entropy_with_logits(tf.nn.softmax(tf.add(tf.matmul(x,W),b)),y) cost=tf.reduce_mean(cross_entropy)
. Aber wenn ich einen anderen Weg,pred=tf.nn.softmax(tf.add(tf.matmul(x,W),b)) cost =tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred),reduction_indices=1))
das Ergebnis ist stabiler und besser.tf.nn.softmax_cross_entropy_with_logits(tf.add(tf.matmul(x, W, b))
in Ihrem Fall.b
muss außerhalb der Klammer,tf.nn.softmax_cross_entropy_with_logits(tf.add(tf.matmul(x, W), b)
Kurze version:
Angenommen, Sie haben zwei Tensoren, wo
y_hat
enthält berechnete Werte für jede einzelne Klasse (Z. B. aus y = W*x +b) undy_true
enthält eine one-hot codiert true-Etiketten.Interpretiert man das erreicht souverän in
y_hat
als nicht normalisierte log-Wahrscheinlichkeiten, dann sind Sie logits.Zusätzlich, die gesamte cross-Entropie-Verlust berechnet, die in dieser Weise:
ist im wesentlichen äquivalent zu der Gesamtmenge cross-Entropie-Verlust berechnet mit der Funktion
softmax_cross_entropy_with_logits()
:Lange version:
In der output-Schicht Ihr neuronales Netzwerk, werden Sie wahrscheinlich berechnen, die ein array enthält, die die Klasse souverän für jedes Ihrer Ausbildung Instanzen, wie aus einer Berechnung
y_hat = W*x + b
. Zu dienen, wie ein Beispiel weiter unten habe ich eineny_hat
2 x 3-array, wobei die Zeilen entsprechen der Trainings-Instanzen und die Spalten entsprechen den Klassen. Also hier gibt es 2 Trainings-Instanzen und 3 Klassen.Beachten, dass die Werte werden nicht normalisiert (d.h. die Zeilen nicht summieren sich zu 1). Um zu normalisieren, können wir die softmax-Funktion, die, interpretiert die Eingabe als nicht normalisierte log-Wahrscheinlichkeiten (aka logits) - und Ausgänge normalisiert lineare Wahrscheinlichkeiten.
Es ist wichtig zu verstehen, was die softmax-Ausgabe sagt. Unten habe ich gezeigt, dass eine Tabelle, die mehr ist offensichtlich der obigen Ausgabe. Es kann gesehen werden, dass, zum Beispiel, die Wahrscheinlichkeit der Ausbildung Beispiel 1 wird mit der Klasse "class 2" ist 0.619. Die Klasse Wahrscheinlichkeiten für jede Schulung Instanz sind normalisiert, so dass die Summe jeder Zeile 1.0.
So, jetzt haben wir Klasse Wahrscheinlichkeiten für jede Schulung Beispiel, wo können wir das argmax() für jede Zeile generieren, die eine endgültige Einstufung. Von oben, wir können generieren, dass die Ausbildung von Beispiel 1 gehört zu der Klasse "class 2" - und Weiterbildung Beispiel 2 gehört der "Class 1".
Sind diese Klassifizierungen korrekt? Wir Messen müssen, gegen die wahren Bezeichnungen aus dem Trainings-set. Sie benötigen einen one-hot kodiert
y_true
array, wobei wieder die Zeilen-training-Instanzen und-Spalten sind Klassen. Unten habe ich ein Beispiel erstellty_true
one-hot-array, wo die wahre Bezeichnung für die Ausbildung Instanz 1 ist "Klasse 2" und die wahre Bezeichnung für die Ausbildung Beispiel 2 ist "Klasse 3".Ist die Wahrscheinlichkeitsverteilung in
y_hat_softmax
Nähe der Wahrscheinlichkeitsverteilung iny_true
? Wir können cross-Entropie-Verlust zur Messung der Fehler.Können wir die Berechnung der Kreuz-Entropie-Verlust bei einem row-wise basis, und die Ergebnisse sehen. Unten sehen wir, dass die Ausbildung der Instanz 1 hat einen Verlust von 0.479, während die Schulung Beispiel 2 hat einen höheren Verlust von 1.200. Dieses Ergebnis macht Sinn, weil in unserem Beispiel oben
y_hat_softmax
zeigte, dass die Ausbildung von Beispiel 1 die höchste Wahrscheinlichkeit für "Klasse 2", was mit Ausbildung Instanz 1 iny_true
; aber die Vorhersage für die Ausbildung Beispiel 2 zeigte eine höchste Wahrscheinlichkeit für "Klasse 1", das entspricht nicht der wahren Klasse "Klasse 3".Was wir wirklich wollen, ist der totale Verlust über alle Trainings-Instanzen. So können wir berechnen:
Mit softmax_cross_entropy_with_logits()
Stattdessen können wir die Berechnung der Gesamt-Kreuz-Entropie-Verlust mit dem
tf.nn.softmax_cross_entropy_with_logits()
- Funktion, wie unten gezeigt.Beachten Sie, dass
total_loss_1
undtotal_loss_2
produzieren im wesentlichen gleichwertige Ergebnisse mit einigen kleinen unterschieden in der sehr Endziffern. Jedoch, Sie könnte genauso gut verwenden Sie die zweite Methode: man nimmt eine weniger code-Zeile und sammelt sich weniger numerische Fehler, weil die softmax erfolgt für Sie innerhalb vonsoftmax_cross_entropy_with_logits()
.tf.nn.softmax
berechnet die vorwärts-Propagierung durch eine softmax-Schicht. Verwenden Sie es während Bewertung des Modells, wenn Sie berechnen die Wahrscheinlichkeiten, dass das Modell Ausgänge.tf.nn.softmax_cross_entropy_with_logits
berechnet die Kosten für eine softmax-Schicht. Es wird nur verwendet, während Ausbildung.Die logits sind die nicht normalisierte log-Wahrscheinlichkeiten output-Modell (das Werte-Ausgabe vor der Normalisierung durch softmax wird angewendet).
tf.nn.softmax_cross_entropy_with_logits
ist zu beurteilen, wie viel das Modell weicht von der gold-Etiketten, nicht auf eine normierte Leistung.tf.nn.sparse_softmax_cross_entropy_with_logits
. Um Wahrscheinlichkeiten verwendentf.nn.softmax
.Oben Antworten, die haben genug Beschreibung für die gestellte Frage.
Hinzu kommt, dass Tensorflow optimiert die Bedienung der Anwendung die Aktivierung der Funktion dann die Berechnung der Kosten, die mit eigenen Aktivierung, gefolgt von Kosten-Funktionen. Daher ist es eine gute Praxis zu verwenden:
tf.nn.softmax_cross_entropy()
übertf.nn.softmax(); tf.nn.cross_entropy()
Finden Sie markante Unterschied zwischen Ihnen in eine ressourcenintensive Modell.
tf.nn.softmax
gefolgt vontf.losses.softmax_cross_entropy
?Was immer geht
softmax
ist das logit -, das ist, was J. Hinton wiederholt in coursera videos die ganze Zeit.