wake-up-neo.com

Überwachen Sie den Schulungs-/Validierungsprozess in Caffe

Ich trainiere das Caffe-Referenzmodell für das Klassifizieren von Bildern. In meiner Arbeit muss ich den Trainingsprozess überwachen, indem ich die Genauigkeit des Modells nach jeweils 1000 Iterationen des gesamten Trainingssatzes und des Validierungssatzes mit 100K- und 50K-Bildern zeichne beziehungsweise. Jetzt mache ich den naiven Ansatz, mache nach jeweils 1000 Iterationen Schnappschüsse, führe den C++ - Klassifizierungscode aus, der das rohe JPEG-Bild liest, an das Netz weiterleitet und die vorhergesagten Etiketten ausgibt. Dies dauert jedoch auf meiner Maschine zu viel Zeit (mit einer Geforce GTX 560 Ti).

Gibt es einen schnelleren Weg, um die Genauigkeitsgrafik der Schnappschussmodelle sowohl für Trainings- als auch für Validierungssätze zu erstellen?

Ich dachte darüber nach, das LMDB-Format anstelle von RAW-Images zu verwenden. Ich kann jedoch keine Dokumentation/Code für die Klassifizierung in C++ im LMDB-Format finden.

14
DucCuong

1) Mit der App NVIDIA-DIGITS können Sie Ihre Netzwerke überwachen. Sie bieten eine grafische Benutzeroberfläche mit Vorbereitung der Datensätze, Modellauswahl und Visualisierung der Lernkurve. Außerdem verwenden sie eine Kaffeeverteilung, die Multi-GPU-Training erlaubt.

2) Oder Sie können einfach den Log-Parser in caffe verwenden.

/pathtocaffe/build/tools/caffe train --solver=solver.prototxt 2>&1 | tee lenet_train.log

Dadurch können Sie das Zugprotokoll in "lenet_train.log" speichern. Dann mit:

python /pathtocaffe/tools/extra/parse_log.py lenet_train.log .

sie analysieren Ihr Zugprotokoll in zwei CSV-Dateien, die Zug und Testverlust enthalten. Sie können sie dann mit dem folgenden Python-Skript plotten

import pandas as pd
from matplotlib import *
from matplotlib.pyplot import *

train_log = pd.read_csv("./lenet_train.log.train")
test_log = pd.read_csv("./lenet_train.log.test")
_, ax1 = subplots(figsize=(15, 10))
ax2 = ax1.twinx()
ax1.plot(train_log["NumIters"], train_log["loss"], alpha=0.4)
ax1.plot(test_log["NumIters"], test_log["loss"], 'g')
ax2.plot(test_log["NumIters"], test_log["acc"], 'r')
ax1.set_xlabel('iteration')
ax1.set_ylabel('train loss')
ax2.set_ylabel('test accuracy')
savefig("./train_test_image.png") #save image as png
23
Jia Li
python /pathtocaffe/tools/extra/parse_log.py lenet_train.log

befehl erzeugt den folgenden Fehler:

usage: parse_log.py [-h] [--verbose] [--delimiter DELIMITER]
                logfile_path output_dir
parse_log.py: error: too few arguments

Lösung:

Für die erfolgreiche Ausführung des Befehls "parse_log.py" sollten die beiden Argumente übergeben werden:

  1. logdatei
  2. pfad des Ausgabeverzeichnisses

Der korrekte Befehl lautet also wie folgt:

python /pathtocaffe/tools/extra/parse_log.py lenet_train.log output_dir
1
Muhammad Farooq

Caffe erstellt jedes Mal Protokolle, wenn Sie versuchen, etwas zu trainieren, und es befindet sich im tmp-Ordner (sowohl Linux als auch Windows).
Ich habe auch ein Plot-Skript in Python geschrieben, mit dem Sie Ihren Verlust/Ihre Genauigkeit leicht visualisieren können.
Platzieren Sie einfach Ihre Trainingsprotokolle mit der Erweiterung .log neben dem Skript und doppelklicken Sie darauf. Sie können auch Eingabeaufforderungen verwenden. Zur einfacheren Verwendung werden alle Protokolle geladen (*). .log) kann es im aktuellen Verzeichnis finden. zeigt auch die obersten 4 Genauigkeiten und bei welcher Genauigkeit sie erreicht wurden. 

sie finden es hier: https://Gist.github.com/Coderx7/03f46cb24dcf4127d6fa66d08126fa3b

1
Breeze