Verwendung von evaluation_loop mit train_loop in tf-slim

9

Ich versuche, ein paar verschiedene Modelle zu implementieren und sie auf CIFAR-10 zu trainieren, und ich möchte dazu TF-slim verwenden. Es sieht so aus, als hätte TF-slim zwei Hauptschleifen, die während des Trainings nützlich sind: train_loop und evaluation_loop.

Meine Frage ist: Was ist der kanonische Weg, diese Schleifen zu benutzen? Als Follow-up: Ist es möglich, frühzeitig mit train_loop zu stoppen?

Momentan habe ich ein Model und meine Trainingsdatei train.py sieht so aus

%Vor%

Was bisher fantastisch ist - meine Modelle trainieren und konvergieren nett. Das kann ich an den Ereignissen in train_log_dir erkennen, wo alle Metriken in die richtige Richtung gehen. Und in die richtige Richtung zu gehen macht mich glücklich.

Aber ich möchte überprüfen, ob sich die Messwerte auch im Validierungssatz verbessern. Ich kenne keine Möglichkeit, TF-slim so zu benutzen, dass es gut mit der Trainingsschleife zusammenpasst. Also habe ich eine zweite Datei namens eval.py erstellt, die meine Evaluationsschleife enthält.

%Vor%

Fragen:

1) Ich habe derzeit dieses Modell für die Auswertung_Loop eine ganze GPU hogging, aber es wird nur selten verwendet. Ich nehme an, dass es eine bessere Möglichkeit gibt, Ressourcen zuzuweisen. Es wäre schön, wenn ich den gleichen evaluation_loop verwenden könnte, um den Fortschritt mehrerer verschiedener Modelle (Checkpoints in mehreren Verzeichnissen) zu überwachen. Ist so etwas möglich?

2) Es gibt kein Feedback zwischen der Bewertung und dem Training. Ich trainiere eine Tonne von Modellen und würde es lieben, früh anzuhalten, um die Modelle aufzuhalten, die nicht lernen oder nicht konvergieren. Gibt es eine Möglichkeit, dies zu tun? Idealerweise werden Informationen aus dem Validierungssatz verwendet, aber wenn es nur auf den Trainingsdaten basieren muss, ist das auch in Ordnung.

3) Ist mein Workflow falsch und ich sollte ihn anders strukturieren? Aus der Dokumentation geht nicht hervor, wie die Evaluation in Verbindung mit dem Training zu verwenden ist.

Aktualisieren ~~ Es scheint, dass ich ab TF r0.11 auch einen segfault bekomme, wenn ich slim.evaluation.evaluation_loop aufruft. Es passiert nur manchmal (für mich, wenn ich meine Jobs an einen Cluster absetze). Es geschieht in sv.managed_session - speziell prepare_or_wait_for_session . ~~ Dies geschah aufgrund der Evaluierungsschleife (eine zweite Instanz von Tensorflow), die versuchte, die GPU zu verwenden, die bereits von der ersten Instanz angefordert wurde.

    
Alex Sax 27.09.2016, 19:04
quelle

3 Antworten

6
  1. evaluation_loop soll (wie Sie es gerade verwenden) mit einem einzigen Verzeichnis verwendet werden. Wenn Sie effizienter arbeiten möchten, können Sie slim.evaluation.evaluate_once verwenden und die geeignete Logik zum Austauschen von Verzeichnissen hinzufügen, wenn Sie dies für richtig halten.

  2. Sie können dies tun, indem Sie das Argument slim.learning.train (..., train_step_fn) überschreiben. Dieses Argument ersetzt die Funktion 'train_step' durch eine benutzerdefinierte Funktion. Hier können Sie eine benutzerdefinierte Trainingsfunktion angeben, die die Werte 'total_loss' und 'sust_stop' nach eigenem Ermessen zurückgibt.

  3. Ihr Workflow sieht gut aus. Dies ist wahrscheinlich der am häufigsten verwendete Workflow zum Lernen / Prüfen mit TF-Slim.

Nathan Silberman 02.10.2016, 15:12
quelle
6

Dank @kmalakoff hat das TensorFlow-Problem einen brillanten Weg zum Problem gefunden, wie man validieren oder testen kann Modell in tf.slim Training. Die Hauptidee ist das Überschreiben von train_step_fn function:

%Vor%     
era_misa 26.03.2017 10:37
quelle
1

Hinzufügen meines 2-Cent:

  

Ich habe derzeit dieses Modell für die Evaluation_loop ein   ganze GPU, aber es wird selten verwendet

Normalerweise benötigt ein Evaluierungsmodell weniger GPU-Speicher. Sie könnten verhindern, dass TF den gesamten GPU-Speicher in Beschlag nimmt, indem Sie die Sitzungskonfiguration allow_growth auf True setzen. Auf diese Weise können Sie die gleiche GPU für Training und Auswertung verwenden

Beispiel @ Training

%Vor%

Beispiel @ Validierung

%Vor%     
yuval 13.02.2017 08:38
quelle

Tags und Links