Keras-multiple-output: Benutzerdefinierten Verlust-Funktion
Ich bin mit einem multiple-output-Modell in keras
model1 = Model(input=x, output=[y2,y3])
model1.compile((optimizer='sgd', loss=cutom_loss_function)
meine custom_loss_function
ist;
def custom_loss(y_true, y_pred):
y2_pred = y_pred[0]
y2_true = y_true[0]
loss = K.mean(K.square(y2_true - y2_pred), axis=-1)
return loss
Ich will nur zum trainieren des Netzes auf die Produktion y2
.
Was ist die Form/Struktur der y_pred
und y_true
argument im Verlust der Funktion, wenn mehrere Ausgänge verwendet werden?
Kann ich auf Ihnen wie oben? Ist es y_pred[0]
oder y_pred[:,0]
?
InformationsquelleAutor shaaa | 2017-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Keras funktionale API-Handbuch können Sie erreichen, dass mit
In keras multi-output-Modelle-Verlust-Funktion angewendet wird für jeden Ausgang separat. In pseudo-code:
Der Funktionalität zu tun-Verlust-Funktion auf mehrere Ausgänge scheint nicht erreichbar für mich. Vllt konnte erreichen, dass durch die Einbeziehung der loss Funktion wie eine Ebene des Netzwerks.
In keras multi-output models loss function is applied for each output separately.
Ich habe ein ähnliches problem und ich sepearately müssen die y_true und y_pred Wert von zwei separaten Ausgang. wie kann ich dieses Problem lösen?Es sei denn, die Rahmenbedingungen in letzter Zeit verändert, ist die einfachste Lösung zum verbinden der Ausgänge in einem einzigen loss Funktion und dann behandeln Sie es
InformationsquelleAutor Sharapolas
Sharapolas Antwort richtig ist.
Jedoch, dass es einen besseren Weg, als mit einem layer zum erstellen benutzerdefinierter Verlust von Funktionen mit komplexen Interdependenz von mehreren Ausgaben eines Modells.
Die Methode, die ich kenne, ist in der Praxis genutzt wird, indem Sie nie Anrufe Modell.kompilieren, sondern nur Modell._make_predict_function(). Von dort aus können Sie gehen auf und bauen eine eigene optimizer-Methode durch Aufruf von model.Ausgabe in es. Dadurch erhalten Sie alle Ausgänge, [y2,y3] in Ihrem Fall. Wenn Sie dabei Ihre Magie mit es, erhalten Sie eine keras.optimizer und verwenden Sie es get_update Methode über Ihr Modell.trainable_weights und Ihren Verlust. Schließlich zurückgeben keras.Funktion mit einer Liste der Eingänge (in Ihrem Fall nur Modell.Eingang) und die updates, die Sie gerade aus dem optimizer.get_update nennen. Diese Funktion ersetzt nun das Modell.fit.
Den oben genannten ist oft in PolicyGradient algorithmen, wie A3C oder PPO. Hier ist ein Beispiel, was ich versucht habe zu erklären:
https://github.com/Hyeokreal/Actor-Critic-Continuous-Keras/blob/master/a2c_continuous.py
Blick auf build_model und critic_optimizer Methoden und Lesen kreas.- backend.Funktion Dokumentation zu verstehen, was passiert.
Fand ich diese Möglichkeit, haben Häufig Probleme mit dem session-management und scheint nicht zu funktionieren im tf-2.0 keras an alle aktuell. Also, wenn jemand weiß, eine Methode, lassen Sie es mich bitte wissen. Ich kam hierher auf der Suche nach einem 🙂
InformationsquelleAutor Nric