Ich arbeite an einem Bildklassen-inkrementellen Klassifikator-Ansatz, der ein CNN als Merkmalsextraktor und einen vollständig verbundenen Block zum Klassifizieren verwendet.
Zuerst habe ich eine Feinabstimmung eines VGG-trainierten Netzwerks vorgenommen, 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 zu vermeiden, dass neue Klassen verfügbar sind.
Wenn einige Klassen verfügbar sind, muss ich jede Ausgabe der Exemplare, einschließlich der Exemplare für die neuen Klassen, berechnen. Nun fügen wir Nullen zu den Ausgaben für alte Klassen hinzu und fügen die Beschriftung hinzu, die jeder neuen Klasse in den Ausgaben der neuen Klassen entspricht. Ich habe meine neuen Bezeichnungen, d.h.
wenn 3 neue Klassen eingehen ....
Alte Klassentypausgabe: [0.1, 0.05, 0.79, ..., 0 0 0]
Neue Klassenausgabe: [0.1, 0.09, 0.3, 0.4, ..., 1 0 0]
** die letzten Ausgaben entsprechen der Klasse.
Meine Frage ist, wie kann ich die Verlustfunktion für eine benutzerdefinierte ändern, um für die neuen Klassen zu trainieren?
Die Verlustfunktion, die ich implementieren möchte, ist definiert als:
wobei der Destillationsverlust den Ausgaben für alte Klassen entspricht, um das Vergessen zu vermeiden, und der Klassifikationsverlust den neuen Klassen entspricht.
Wenn Sie mir eine Beispielcode zur Verfügung stellen können, um die Verlustfunktion in Keras zu ändern, wäre das nett.
Danke !!!!!