In Tensorflow, was ist der Unterschied zwischen sampled_softmax_loss und softmax_cross_entropy_with_logits
In tensorflow, gibt es Methoden genannt softmax_cross_entropy_with_logits
und sampled_softmax_loss
.
Lese ich die tensorflow Dokument und suchte google nach mehr Informationen, aber ich konnte nicht finden Sie den Unterschied. Es sieht aus wie mir beide berechnet den Verlust mithilfe der softmax-Funktion.
Mit sampled_softmax_loss
zur Berechnung der Verlust -
loss = tf.reduce_mean(tf.nn.sampled_softmax_loss(...))
Mit softmax_cross_entropy_with_logits
zur Berechnung der Verlust -
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(P, Q))
Mir, die Berechnung der softmax-Verlust ist die gleiche wie die Berechnung softmaxed cross-Entropie (z.B. cross_entropy(softmax(train_x))
)
Könnte jemand mir sagen, warum gibt es zwei verschiedene Methoden, und welche Methode sollte ich verwenden, in dem Fall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Ziel-Vokabular(oder in anderen Worten die Menge der Klassen, die Sie wollen, um vorherzusagen) ist wirklich groß, es ist sehr schwer zu bedienen regelmäßige softmax, weil Sie zur Berechnung der Wahrscheinlichkeit für jedes Wort im Wörterbuch. Durch die Verwendung
sampled_softmax_loss
Sie nur in Betracht, Teilmenge V Ihren Wortschatz zu berechnen, Ihren Verlust.Abgetastet softmax macht nur Sinn, wenn wir eine Probe(unsere V) weniger als vokabulargröße. Wenn Ihr Vokabular(Menge der labels) ist klein, es gibt keine Punkt mit
sampled_softmax_loss
.Können Sie sehen, details zur Implementierung in diesem Papier:
http://arxiv.org/pdf/1412.2007v2.pdf
Auch können Sie sehen beispielsweise, wo es verwendet wird - Sequenz zu Sequenz die translation in diesem Beispiel
Stichprobe:
Abgetastet, in beiden Fällen brauchen Sie die Berechnung nicht für alle, was möglich ist, als Ausgang (z.B.: es gibt zu viele Wörter in einem Wörterbuch zu nehmen, alle von Ihnen bei jeder Ableitung, also nehmen wir einfach ein paar Probe und lernen, die für NLP-Probleme).
softmax_cross_entropy_with_logits
:Dies ist die cross-Entropie und erhält logits als Eingänge und liefert das, was verwendet werden kann als ein Verlust.
sampled_softmax_loss
:Dies ist eine Stichprobe softmax_cross_entropy_with_logits, so dauert es nur ein paar Proben, bevor Sie über das Kreuz enthropy anstatt mit der full cross enthropy: https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/python/ops/nn_impl.py#L1269