Tensorflow: Finetune vortrainiertes Modell auf neuen Datensatz mit unterschiedlicher Anzahl von Klassen

8

Wie kann ich ein vortrainiertes Modell in Tensorflow auf einem neuen Datensatz optimieren? In Caffe kann ich einfach die letzte Ebene umbenennen und einige Parameter für die zufällige Initialisierung festlegen. Ist etwas ähnliches im Tensorflow möglich?

Angenommen, ich besitze eine Prüfpunktdatei ( deeplab_resnet.ckpt ) und Code, der das Berechnungsdiagramm einrichtet, in dem ich die letzte Ebene so ändern kann, dass sie die gleiche Anzahl von Ausgaben hat wie die neue Datenmenge.

Dann versuche ich die Sitzung so zu starten:

%Vor%

Dies gibt mir jedoch einen Fehler, wenn ich die Funktion saver.restore aufruft, da sie exakt die gleiche Graphenstruktur erwartet wie die, von der sie gespeichert wurde. Wie kann ich nur alle Gewichtungen mit Ausnahme der letzten Ebene aus der 'ckpt_path/deeplab_resnet.ckpt' -Datei laden? Ich habe auch versucht, den Classification Layernamen zu ändern, aber auch kein Glück dort ...

Ich verwende das tensorflow-deeplab-resnet-Modell

    
mcExchange 19.01.2017, 19:26
quelle

1 Antwort

3

Sie können die Namen der Variablen angeben, die Sie wiederherstellen möchten.

Sie können also eine Liste aller Variablen im Modell erhalten und die Variablen der letzten Ebene herausfiltern:

%Vor%

Einzelheiten finden Sie in der Dokumentation .

Alternativ können Sie versuchen, das gesamte Modell zu laden und eine neue "Verzweigung" aus der Ebene vor der letzten zu erstellen und während des Trainings in der Kostenfunktion zu verwenden.

    
Alexey Romanov 23.01.2017, 19:21
quelle

Tags und Links