2017-10-19 3 views
1

Da der Quellcode von tf.nn.softmax_cross_entropy_with_logits in gen_nn_ops versteckt ist, könnte mir jemand vielleicht erklären, wie Tensorflow die Kreuzentropie nach Softmax berechnet. Ich meine, nach softmax könnte es wegen der Präzision 0 ausgeben, was zu einem NaN-Problem mit Kreuz-Entropie führen wird. Hat tensorflow die clip-Methode benutzt, wenn softmax die Ausgabe davon begrenzt hat?tensorflow softmax_cross_entropy code

Antwort

0

Die Implementierung von tf.nn.softmax_cross_entropy_with_logits geht weiter zu nativem C++ - Code, here ist XLA-Implementierung. Logits sind nicht gebunden und 0 ist möglich, wenn einer der Logits viel größer als andere ist. Beispiel:

>>> session.run(tf.nn.softmax([10.0, 50.0, 100.0, 200.0])) 
array([ 0., 0., 0., 1.], dtype=float32) 

Wenn Sie möchten, können Sie die Logits Clip kurz vor dem softmax, aber es wird nicht empfohlen, da es die Steigung tötet, wenn der Ausgang groß ist. Eine bessere Option ist es, batch normalization zu verwenden, um die Aktivierungen mehr normal verteilt zu machen.

Verwandte Themen