2016-06-12 11 views

Antwort

-1

In der Kopfversion (ab heute) finden Sie die Funktion in https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py Zeile # 424.

Der Kommentar sagt:

Maßnahmen die Wahrscheinlichkeit, Fehler in diskreten Klassifikationsaufgaben in , die die Klassen gegenseitig ausschließen (jeder Eintrag in genau eine Klasse). Zum Beispiel ist jedes CIFAR-10-Bild mit einem und nur einem Etikett gekennzeichnet: ein Bild kann ein Hund oder ein Lastwagen sein, aber nicht beides.

0

Der wichtigste Teil der Umsetzung ist here an der Linie 132 beginnt

Dieser Funktor von der kernel implementation genannt.

Es verwendet eine nicht sehr gut dokumentierte Eigenschaft von Eigen genannt Generatoren, die relativ flexiblen Code schreiben lassen und es für CPU und NVCC für GPU kompilieren lassen.

0

sparse_softmax_cross_entropy_with_logits entspricht einer numerisch stabile Version der folgenden:

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

oder, in mehr "lesbar" numpy-Code:

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

wo softmax(x) = np.exp(x)/np.sum(np.exp(x)).

Das heißt, es berechnet die Softmax der bereitgestellten Logits, nimmt das Protokoll davon, um die Log-Wahrscheinlichkeiten abzurufen, und schneidet die Log-Wahrscheinlichkeiten ab, um die Log-Wahrscheinlichkeit des Ziels abzurufen.

Dies geschieht jedoch auf eine numerisch stabile Art und Weise (einige Dinge können hier schief gehen), indem einigen Operationen kleine Werte hinzugefügt werden. Dies bedeutet, dass die Berechnung der obigen - ausführlichen - Version nur ungefähr die gleichen Werte ergibt wie nn.sparse_softmax_cross_entropy_with_logits (einige Tests haben gezeigt, dass die Differenz konsistent kleiner als 2e-6 ist).