Подтвердить что ты не робот

Точная настройка модели GoogLeNet

Я тренировал модель GoogLeNet с нуля. Но это не принесло мне многообещающих результатов.
В качестве альтернативы, я хотел бы сделать точную настройку модели GoogLeNet на моем наборе данных. Кто-нибудь знает, какие шаги я должен соблюдать?

4b9b3361

Ответ 1

Предполагая, что вы пытаетесь сделать классификацию изображений. Это должны быть шаги для финализации модели:

1. Класс классификации

Исходный классификационный уровень "loss3/classifier" выводит прогнозы для 1000 классов (для него mum_output установлено значение 1000). Вам нужно будет заменить его новым слоем с помощью num_output. Замена уровня классификации:

  • Измените имя слоя (чтобы при чтении исходных весов из файла caffemodel не было конфликта с весами этого слоя).
  • Измените num_output на нужное количество классов вывода, которые вы пытаетесь предсказать.
  • Обратите внимание, что вам нужно изменить ВСЕ классы классификации. Обычно есть только один, но GoogLeNet имеет три: "loss1/classifier", "loss2/classifier" и "loss3/classifier".

2. Данные

Вам нужно создать новый набор учебных материалов с новыми метками, которые вы хотите настроить. См., Например, этот пост о том, как создать набор данных lmdb.

3. Какую обширную настройку вы хотите?

При настройке модели вы можете обучить ВСЕ весовые модели или выбрать фиксацию некоторых весов (обычно фильтров нижних/более глубоких слоев) и тренировать только веса самых верхних слоев. Этот выбор зависит от вас, и он обычно зависит от количества доступных данных обучения (чем больше примеров, тем больше весов, которые вы можете себе позволить). Каждый слой (который содержит обучаемые параметры) имеет param { lr_mult: XX }. Этот коэффициент определяет, насколько восприимчивы эти веса к обновлениям SGD. Установка param { lr_mult: 0 } означает, что вы FIX веса этого слоя, и они не будут изменены в процессе обучения.
Измените свой train_val.prototxt соответственно.

4. Выполнить caffe

Запустите caffe train, но поставьте его весом caffemodel в качестве начального веса:

~$ $CAFFE_ROOT/build/tools/caffe train -solver /path/to/solver.ptototxt -weights /path/to/orig_googlenet_weights.caffemodel 

Ответ 2

Тонкая настройка - очень полезный трюк для достижения многообещающей точности по сравнению с прошлой ручной функцией. @Shai уже опубликовал хороший учебник по тонкой настройке Googlenet с использованием Caffe, поэтому я просто хочу дать несколько рекомендаций и трюков для точной настройки для общих случаев.

В течение большей части времени мы сталкиваемся с проблемой классификации задач, что новый набор данных (например, Цветочный набор данных Oxford 102 или Cat & Dog) имеет следующие четыре общие ситуации CS231n:

  • Новый набор данных невелик и аналогичен исходному набору данных.
  • Новый набор данных небольшой, но отличается от исходного набора данных (наиболее распространенные случаи)
  • Новый набор данных большой и похож на оригинальный набор данных.
  • Новый набор данных большой, но отличается от исходного набора данных.

На практике в большинстве случаев у нас недостаточно данных для обучения сети с нуля, но может быть достаточно для предварительно обученной модели. Какими бы ни были случаи, о которых я упоминал выше, мы должны заботиться только о том, что у нас достаточно данных для обучения CNN?

Если да, мы можем тренировать CNN с нуля. Однако на практике все же полезно инициализировать вес от предварительно подготовленной модели.

Если нет, нам нужно проверить, сильно ли данные сильно отличаются от исходных наборов данных? Если это очень похоже, мы можем точно настроить полностью подключенную нейронную сеть или тонко настроить SVM. Однако, если он сильно отличается от исходного набора данных, нам может понадобиться настроить тонкую настройку сверточной нейронной сети, чтобы улучшить обобщение.

Ответ 3

Я пытался сделать тот же процесс. Но я застрял. Я искал информацию, пока не прибыл сюда. Просто позвольте мне сказать спасибо большое @Shai