Мониторинг процесса обучения/валидации в Caffe
Я изучаю справочную модель Caffe для классификации изображений.
Моя работа требует, чтобы я контролировал процесс обучения, рисуя график точности модели после каждых 1000 итераций на весь набор тренировок и набор валидации, который имеет изображения 100 КБ и 50 КБ соответственно.
Прямо сейчас, я беру наивный подход, делаю моментальные снимки после каждых 1000 итераций, запускаю код класса С++, который считывает изображение в формате JPEG и пересылается в сеть и выводит предсказанные метки. Однако это занимает слишком много времени на моей машине (с GeForce GTX 560 Ti)
Есть ли какой-либо более быстрый способ, который я могу сделать, чтобы иметь график точности моделей моментальных снимков на наборах обучения и проверки?
Я думал об использовании формата LMDB вместо необработанных изображений. Однако я не могу найти документацию/код о выполнении классификации на С++ с использованием формата LMDB.
Ответы
Ответ 1
1) Вы можете использовать приложение NVIDIA-DIGITS для мониторинга ваших сетей. Они предоставляют графический интерфейс, включая подготовку набора данных, выбор модели и визуализацию кривой обучения. Более того, они используют распределение кофе, позволяя обучение с несколькими GPU.
2) Или вы можете просто использовать log-parser внутри caffe.
/pathtocaffe/build/tools/caffe train --solver=solver.prototxt 2>&1 | tee lenet_train.log
Это позволяет сохранить журнал поездов в "lenet_train.log". Затем, используя:
python /pathtocaffe/tools/extra/parse_log.py lenet_train.log .
вы разбираете свой журнал поездов в два файла csv, содержащие поезда и потерю теста. Затем вы можете построить их с помощью следующего python script
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
Ответ 2
Caffe создает журналы каждый раз, когда вы пытаетесь что-то обучить, и его расположение в папке tmp (как linux, так и windows).
Я также написал график script в python, который вы можете легко использовать для визуализации вашей потери/точности.
Просто разместите свои журналы обучения с расширением .log
рядом с script и дважды щелкните по нему.
Вы также можете использовать командные подсказки, но для удобства использования при его запуске он загружает все журналы (*.log), которые он может найти в текущем каталоге.
он также показывает лучшие 4 точности и точность, с которой они были достигнуты.
вы можете найти его здесь: https://gist.github.com/Coderx7/03f46cb24dcf4127d6fa66d08126fa3b
Ответ 3
python /pathtocaffe/tools/extra/parse_log.py lenet_train.log
Команда выдает следующую ошибку:
usage: parse_log.py [-h] [--verbose] [--delimiter DELIMITER]
logfile_path output_dir
parse_log.py: error: too few arguments
Решение:
Для успешного выполнения команды "parse_log.py" мы должны передать два аргумента:
- Файл журнала
- путь к выходному каталогу
Итак, правильная команда выглядит следующим образом:
python /pathtocaffe/tools/extra/parse_log.py lenet_train.log output_dir