web-dev-qa-db-fra.com

Surveiller le processus de formation/validation dans Caffe

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 toutes les 1000 itérations de l'ensemble du jeu de formation et du jeu de validation comportant des images de 100K et 50K. respectivement. À l’heure actuelle, j’adopte l’approche naïve, crée des instantanés toutes les 1000 itérations, exécute le code de classification C++ qui lit une image JPEG brute, puis le transmet au réseau et affiche les étiquettes prédites. Cependant, cela prend trop de temps sur ma machine (avec une Geforce GTX 560 Ti)

Existe-t-il un moyen plus rapide d'obtenir le graphique de précision des modèles d'instantané 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++ utilisant le format LMDB.

14
DucCuong

1) Vous pouvez utiliser l’application NVIDIA-DIGITS pour surveiller vos réseaux. Ils fournissent une interface graphique comprenant la préparation du jeu de données, la sélection du modèle et la visualisation de la courbe d'apprentissage. De plus, ils utilisent une distribution caffe permettant une formation multi-GPU .

2) Ou, vous pouvez simplement utiliser le log-analyseur à 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 train dans "lenet_train.log". Puis en utilisant:

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

vous analysez votre fiche de train dans deux fichiers CSV, contenant les pertes de train et 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
23
Jia Li
python /pathtocaffe/tools/extra/parse_log.py lenet_train.log

la 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 que la commande "parse_log.py" soit exécutée avec succès, nous devons passer les deux arguments:

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

Donc, la commande correcte est la suivante:

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

Caffe crée des journaux chaque fois que vous essayez d’entraîner quelque chose et il est situé 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/exactitude.
Il suffit de placer vos journaux d’entraînement avec l’extension .log à côté du script et de cliquer deux fois dessus. .log) il peut trouver dans le répertoire courant. Il indique également les 4 plus grandes précisions et précision à laquelle elles ont été obtenues. 

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

1
Breeze