2017-08-05 2 views
0

Ich baute ein Netzwerk, dichten (10) -Softmax-Crossentropy, sowohl in theano und Keras (theano Backend). Ich entleere die Berechnung Graphen jeweils. Auf Theanos Version (Abb. 1 ist diese Berechnungsgraphen war, was ich dachte. Aber auf keras Version (Abb. 2), so scheint es nach der Definition des Verlustes (crossentropy) hinzugefügt Berechnungen werden. Warum?Was macht Keras nach Definition der Verlustfunktion?

Bitte lehren diejenigen, die verstehen, was Sie tun ..

Fig.1 Theano version

Fig.2 Keras(backend is Theano) version

Antwort

0

in Keras, nach dem Verlust Berechnung, Einwaagen und Verlustgewichte auf den Verlust angewendet werden. sehen Sie diese Zeilen im Skript training.py.

  • Probengewicht:

    score_array = K.mean(score_array, axis=list(range(weight_ndim, ndim))) 
        score_array *= weights 
        score_array /= K.mean(K.cast(K.not_equal(weights, 0), K.floatx())) 
    return K.mean(score_array) 
    
  • Loss Gewicht:

    if total_loss is None: 
        total_loss = loss_weight * output_loss 
    

Es ist einfach diese Zeilen zurück in die Berechnungsgraphen abzubilden. Zum Beispiel berechnet der folgende Block K.mean(K.cast(K.not_equal(weights, 0), K.floatx())):

enter image description here

  • Der erste Knoten K.not_equal(weights, 0)
  • Der zweite Knoten ist K.cast(..., K.floatx())
  • Alle anderen Knoten sind über K.mean(...)
    • linken Zweig berechnet berechnet die Stapelgröße (rufen Sie shape auf und erhalten Sie die Dimension 0 davon)
    • der rechte Zweig berechnet die Ausgabe des rechten Zweig vom Ausgang des linken Zweig
  • Der endgültige Ausgang dieses Blocks
  • Dividieren Summe Tensor ist die skalare K.mean(K.cast(K.not_equal(weights, 0), K.floatx()))
Verwandte Themen