Benutzerdefinierte Verlustfunktion in Keras

8

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 !!!!!

    
Eric 06.05.2017, 08:55
quelle

1 Antwort

18
___ tag123deeplearning ___ Deep Learning ist ein Bereich des maschinellen Lernens, dessen Ziel es ist, komplexe Funktionen mit speziellen neuronalen Netzwerkarchitekturen zu erlernen, die "tief" sind (aus vielen Schichten bestehen). Dieses Tag sollte für Fragen zur Implementierung von Deep-Learning-Architekturen verwendet werden. Allgemeine Fragen zum maschinellen Lernen sollten mit "maschinelles Lernen" gekennzeichnet werden. Eine Markierung für die relevante Softwarebibliothek (z. B. "keras" oder "tensorflow") ist hilfreich. ___ qstnhdr ___ Benutzerdefinierte Verlustfunktion in Keras ___ tag123convneuralnetwork ___ Ein konvolutionelles neuronales Netzwerk (CNN oder ConvNet) ist eine Klasse von tiefen, vorwärtsgekoppelten künstlichen neuronalen Netzwerken, die erfolgreich zur Analyse visueller Bilder verwendet wurde. [tag: deep-learning] ___ qstntxt ___

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: %code%

Neue Klassenausgabe: %code% ** 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 !!!!!

    
___ tag123keras ___ Keras ist eine minimalistische, hoch modulare neuronale Netzwerkbibliothek, die eine Python-API auf hohem Niveau bietet, die Rapid Prototyping ermöglicht und die Verwendung eines von mehreren rechnergestützten Back-Ends ermöglicht. ___ antwort43821374 ___

Sie müssen dazu lediglich eine Funktion definieren, die die Keras-Backend-Funktionen für Berechnungen verwendet. Die Funktion muss die wahren Werte und die vorhergesagten Modellwerte annehmen.

Nun, da ich nicht sicher bin, was g, q, x und y in Ihrer Funktion sind, werde ich hier nur ein einfaches Beispiel erstellen, ohne sich darum zu kümmern, was es bedeutet oder ob es eine wirklich nützliche Funktion ist:

%Vor%

Alle Backend-Funktionen sind hier zu sehen: Ссылка

Kompilieren Sie danach Ihr Modell mit dieser Funktion statt einer regulären Funktion:

%Vor%     
___ tag123lossfunction ___ hilf uns dieses Wiki zu bearbeiten ___ tag123computervision ___ Computer Vision ermöglicht die Verarbeitung von Bildern oder Sequenzen von Bildern mit einem Computer unter Verwendung eines Algorithmus. Das Ziel des Algorithmus ist es, Informationen aus dem Bild zu extrahieren. Manchmal erzeugt diese Information ein aktualisiertes Bild oder manchmal andere Messungen. Ein Beispiel für ein aktualisiertes Bild besteht darin, die Kanten im Bild zu erhalten - Kantenerkennung genannt. ___
Daniel Möller 06.05.2017, 14:04
quelle