webentwicklung-frage-antwort-db.com.de

Benutzerdefinierte Verlustfunktion in Keras

Ich arbeite an einem inkrementellen Bildklassifizierer-Ansatz, bei dem ein CNN als Feature-Extraktor und ein vollständig verbundener Block zum Klassifizieren verwendet werden.

Zuerst habe ich ein VGG-pro-trainiertes Netzwerk feinabgestimmt, um eine neue Aufgabe zu erledigen. Sobald das Netz für die neue Aufgabe trainiert ist, speichere ich einige Beispiele für jede Klasse, um nicht zu vergessen, wann neue Klassen verfügbar sind.

Wenn einige Klassen verfügbar sind, muss ich jede Ausgabe der Exemplare berechnen, einschließlich der Exemplare für die neuen Klassen. Jetzt füge ich Nullen zu den Ausgaben für alte Klassen hinzu und füge die Beschriftung hinzu, die jeder neuen Klasse in den Ausgaben für neue Klassen entspricht. Ich habe meine neuen Beschriftungen, d. H. Wenn 3 neue Klassen eintreten ...

Alte Klassentypausgabe: [0.1, 0.05, 0.79, ..., 0 0 0]

Neue Klassentypausgabe: [0.1, 0.09, 0.3, 0.4, ..., 1 0 0] ** Die letzten Ausgaben entsprechen der Klasse.

Meine Frage ist, wie ich die Verlustfunktion ändern kann, damit eine Gewohnheit für die neuen Kategorien ausbildet? Die Verlustfunktion, die ich implementieren möchte, ist wie folgt definiert:

loss function

wobei der Destillationsverlust den Ergebnissen für alte Klassen entspricht, um ein Vergessen zu vermeiden, und der Klassifizierungsverlust den neuen Klassen entspricht.

Wenn Sie mir ein Codebeispiel zur Verfügung stellen könnten, um die Verlustfunktion in Keras zu ändern, wäre das nett.

Vielen Dank!!!!!

36
Eric

Dazu müssen Sie lediglich eine Funktion definieren und Keras-Backend-Funktionen für Berechnungen verwenden. Die Funktion muss die wahren Werte und die vom Modell vorhergesagten Werte annehmen.

Da ich mir nicht sicher bin, was g, q, x und y in Ihrer Funktion sind, werde ich hier nur ein einfaches Beispiel erstellen, ohne darauf zu achten, was es bedeutet oder ob es sich um eine tatsächliche nützliche Funktion handelt:

import keras.backend as K

def customLoss(yTrue,yPred):
    return K.sum(K.log(yTrue) - K.log(yPred))

Alle Backend-Funktionen finden Sie hier: https://keras.io/backend/#backend-functions

Danach kompilieren Sie Ihr Modell mit dieser Funktion anstelle einer regulären:

model.compile(loss=customLoss, optimizer = .....)
61
Daniel Möller