Контролировать процесс обучения / проверки в кафе

Я тренирую Caffe Reference Model для классификации изображений.
Моя работа требует, чтобы я следил за процессом обучения, рисуя график точности модели после каждых 1000 итераций на всем обучающем наборе и проверочном наборе, который имеет изображения 100K и 50K соответственно.
Прямо сейчас я использую наивный подход, делаю снимки после каждых 1000 итераций, запускаю код классификации C ++, который считывает необработанное изображение JPEG и передает его в сеть и выводит предсказанные метки. Однако это занимает слишком много времени на моей машине (с Geforce GTX 560 Ti)

Есть ли какой-нибудь более быстрый способ, которым я могу сделать, чтобы получить график точности моделей моментальных снимков как для обучающих, так и для проверочных наборов?

Я думал об использовании формата LMDB вместо необработанных изображений. Тем не менее, я не могу найти документацию / код о выполнении классификации в C ++ с использованием формата LMDB.

14

Решение

1) Вы можете использовать NVIDIA-ЦИФРЫ приложение для мониторинга ваших сетей. Они предоставляют графический интерфейс, включая подготовку набора данных, выбор модели и визуализацию кривой обучения. Более того, они используют распределение кофе, позволяющее обучение на нескольких 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

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
22

Другие решения

Caffe создает логи каждый раз, когда вы пытаетесь что-то натренировать, и это находится в папке tmp (как в linux, так и в windows).
Я также написал скрипт на Python, который вы можете легко использовать для визуализации вашей потери / точности.
Просто разместите свои тренировочные журналы с .log Расширение рядом со скриптом и дважды щелкните по нему.
Вы также можете использовать командные строки, но для простоты использования при выполнении загружает все журналы (* .log), которые можно найти в текущем каталоге.
это также показывает лучшие 4 точности и с какой точностью они были достигнуты.

Вы можете найти это здесь : https://gist.github.com/Coderx7/03f46cb24dcf4127d6fa66d08126fa3b

1

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» мы должны передать два аргумента:

  1. журнальный файл
  2. путь к выходному каталогу

Итак, правильная команда выглядит следующим образом:

python /pathtocaffe/tools/extra/parse_log.py lenet_train.log output_dir
1
По вопросам рекламы [email protected]