Мониторинг процесса обучения/валидации в 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