2015-08-13 1 views
14

Je forme le modèle de référence Caffe pour la classification des images. Mon travail exige que je surveille le processus de formation en dessinant un graphique de la précision du modèle après chaque 1000 itérations sur l'ensemble de l'ensemble de formation et de validation qui a des images de 100K et 50K respectivement. À l'heure actuelle, je prends l'approche naïve, je fais des snapshots toutes les 1000 itérations, je lance le code de classification C++ qui lit l'image JPEG brute et la redirige vers le réseau et affiche les étiquettes prédites. Cependant, cela prend trop de temps sur ma machine (avec une Geforce GTX 560 Ti)Processus de formation/validation du moniteur dans Caffe

Y a-t-il un moyen plus rapide que je puisse faire pour avoir le graphique de la précision des modèles de snapshots sur les ensembles de formation et de validation?

Je pensais utiliser le format LMDB au lieu d'images brutes. Cependant, je ne trouve pas de documentation/code sur la classification en C++ en utilisant le format LMDB.

+2

Pourquoi n'êtes-vous pas en utilisant [DIGITS] (https://developer.nvidia.com/digits) pour vous aider dans le processus de formation, il a des capacités de surveillance intégrées – Shai

Répondre

19

1) Vous pouvez utiliser l'application NVIDIA-DIGITS pour surveiller vos réseaux. Ils fournissent une interface graphique comprenant la préparation de l'ensemble de données, la sélection du modèle et la visualisation de la courbe d'apprentissage. Plus, ils utilisent une distribution caffe permettant multi-GPU training. 2) Ou, vous pouvez simplement utiliser l'analyseur de journal à l'intérieur de caffe.

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

Cela vous permet d'enregistrer le journal de train dans "lenet_train.log". Puis en utilisant:

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

d'analyser votre journal de train dans deux fichiers CSV, contenant le train et la perte de test. Vous pouvez ensuite les tracer en utilisant le script python suivant

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 
+1

Merci pour la réponse détaillée .DIGITS semble être un bon outil pour Je vais l'utiliser pour les prochaines expériences – DucCuong

+0

Je suis un peu confus, le "test_log" dont vous parlez est en fait "Validation" ou est un vrai "test"? – Saman

+0

C'est une validation. Mais il semble que dans le café 'val' et 'test' signifient la même chose. –

1

Caffe crée des journaux chaque fois que vous essayez de former quelque chose, et il se trouve dans le dossier tmp (Linux et Windows).
J'ai également écrit un script de traçage en python que vous pouvez facilement utiliser pour visualiser votre perte/précision.
Il suffit de placer vos journaux d'entraînement avec l'extension .log à côté du script et double-cliquez dessus. Vous pouvez également utiliser les invites de commande, mais pour plus de facilité, il charge tous les journaux (* .log) qu'il peut trouver dans le répertoire courant lorsqu'il est exécuté. il montre également les 4 meilleures précisions et à quelle précision elles ont été atteintes.

vous pouvez le trouver ici: https://gist.github.com/Coderx7/03f46cb24dcf4127d6fa66d08126fa3b

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

produit l'erreur suivante:

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

Solution:

Pour l'exécution réussie de « parse_log.commande py », nous devrions passer les deux arguments:

  1. fichier journal
  2. chemin
  3. du répertoire de sortie

Ainsi, la commande correcte est la suivante:

python /pathtocaffe/tools/extra/parse_log.py lenet_train.log output_dir 
+0

ajouter un "." (un point sans lit) à la fin de la commande et réessayez –