Замораживание весов в сети VGG19 для трансферного обучения в кафе - PullRequest
0 голосов
/ 23 февраля 2019

Причина, по которой я задаю этот вопрос, заключается в том, что в VGG19 есть уровни нормализации партии (в отличие от VGG16, например).

Я пытаюсь обучить сеть Faster-RCNN вCaffe.Я делаю это:

  • Загрузка предварительно обученной модели VGG19 ImageNet (весовой файл + файл prototxt)
  • Удаление полностью подключенных слоев из файла prototxt
  • Добавлениеслои RPN и Fast-RCNN поверх сверточных слоев основной линии VGG19

Я ничего не изменил в отношении значений lr_mult сверточных слоев.В файле prototxt сверточные слои (такие как conv1_1 и т. Д. Имеют ненулевые значения lr_mult, в то время как значения lr_mult слоев пакетной нормализации установлены в 0 (слои, названные как conv1_1/bn).

Означает ли факт, что слои пакетной нормализации заморожены, означает, что сверточные слои также заморожены? Или я должен установить lr_mult на 0 также в слоях с именем convX_X?


Обновление : после запуска другого процесса обучения при обнулении lr_mult всех сверточных слоев время обучения резко сократилось, что означает, что ответом является то, что значение lr_mult должно быть установлено на 0также в слоях convX_X.

1 Ответ

0 голосов
/ 25 февраля 2019

Чтобы правильно заморозить сверточные слои с батчормом в Caffe, вам необходимо:

  • Для сверточных слоев: установить lr_mult param на 0
  • Для слоев батчнорм: установить lr_multв параметрах 0 установите use_global_stats в true:
layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  batch_norm_param {
    use_global_stats: true
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
}

Означает ли факт, что слои нормализации партии заморожены, означает, что сверточные слои также заморожены?

Конечно нет.Однако, используя propagate_down param, вы можете добиться этого эффекта: Как мне предотвратить обратные вычисления в определенных слоях в caffe .

...