Как использовать слой "BatchNorm" в кофе?
Я немного запутался в том, как использовать/вставлять слой "BatchNorm"
в свои модели.
Я вижу несколько разных подходов, например:
ResNets: "BatchNorm"
+ "Scale"
(без совместного использования параметров)
"BatchNorm"
сразу следует слой "Scale"
:
layer {
bottom: "res2a_branch1"
top: "res2a_branch1"
name: "bn2a_branch1"
type: "BatchNorm"
batch_norm_param {
use_global_stats: true
}
}
layer {
bottom: "res2a_branch1"
top: "res2a_branch1"
name: "scale2a_branch1"
type: "Scale"
scale_param {
bias_term: true
}
}
В примере cifar10, представленном caffe, "BatchNorm"
используется без "BatchNorm"
"Scale"
следующего за ним:
layer {
name: "bn1"
type: "BatchNorm"
bottom: "pool1"
top: "bn1"
param {
lr_mult: 0
}
param {
lr_mult: 0
}
param {
lr_mult: 0
}
}
cifar10 Различные batch_norm_param
для TRAIN
и TEST
batch_norm_param: use_global_scale
изменяется между batch_norm_param: use_global_scale
TRAIN
и TEST
:
layer {
name: "bn1"
type: "BatchNorm"
bottom: "pool1"
top: "bn1"
batch_norm_param {
use_global_stats: false
}
param {
lr_mult: 0
}
param {
lr_mult: 0
}
param {
lr_mult: 0
}
include {
phase: TRAIN
}
}
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
}
include {
phase: TEST
}
}
Так что это должно быть?
Как использовать слой "BatchNorm"
в кофе?
Ответы
Ответ 1
Если вы следуете оригинальной бумаге, нормализация партии должна сопровождаться слоями Scale и Bias (смещение может быть включено через шкалу, хотя это делает параметры смещения недоступными). use_global_stats
также следует изменить с обучения (False) на тестирование/развертывание (True) - это поведение по умолчанию. Обратите внимание, что первый пример, который вы даете, представляет собой прототип для развертывания, поэтому для него нужно установить значение "Истина".
Я не уверен в общих параметрах.
Я сделал запрос на растяжение, чтобы улучшить документы по нормализации партии, но затем закрыл его, потому что я хотел его изменить. И тогда я так и не вернулся.
Обратите внимание, что я думаю, что lr_mult: 0
для "BatchNorm"
больше не требуется (возможно, не разрешено?), Хотя я не нахожу соответствующий PR сейчас.