Поиск…


Вступление

Из документов :

«Нормализует вход, чтобы иметь 0-среднюю и / или единицу (1) дисперсию в партии.

Этот слой вычисляет стандартную партию, как описано в [1].

[...]

[1] С. Иоффе и С. Сегеди, «Нормализация партии: ускорение глубокого сетевого обучения путем сокращения внутреннего сдвига ковариации». arXiv preprint arXiv: 1502.03167 (2015). "

параметры

параметр подробности
use_global_stats Из поста Рорбаха со 2 марта 2016 года - может быть, он знает:
(use_global_stats) «По умолчанию во время обучения сеть вычисляет статистику среднего среднего / дисперсии по среднему среднему значению, которая затем используется во время тестирования для обеспечения детерминированных выходов для каждого входа. Вы можете вручную переключать, собирает ли сеть или использует статистику с помощью опции use_global_stats. ВАЖНО: для работы этой функции вы ДОЛЖНЫ установить скорость обучения в ноль для всех трех параметров blob, т. е. param {lr_mult: 0} три раза в определении слоя.
(use_global_stats) Это означает, что по умолчанию (как указано в batch_norm_layer.cpp), вам не нужно устанавливать use_global_stats вообще в прототипе. use_global_stats_ = this-> phase_ == TEST; "

Прототип для обучения

Ниже приведен пример определения для обучения слою BatchNorm с канальной шкалой и смещением. Обычно слой BatchNorm вставлен между слоями свертки и выпрямления. В этом примере свертка выводит layerx и выпрямление будет получать layerx-bn .

layer { bottom: 'layerx' top: 'layerx-bn' name: 'layerx-bn' type: 'BatchNorm'
  batch_norm_param {
    use_global_stats: false  # calculate the mean and variance for each mini-batch
    moving_average_fraction: .999  # doesn't effect training 
  }
  param { lr_mult: 0 } 
  param { lr_mult: 0 } 
  param { lr_mult: 0 }}
# channel-wise scale and bias are separate
layer { bottom: 'layerx-bn' top: 'layerx-bn' name: 'layerx-bn-scale' type: 'Scale',
  scale_param { 
    bias_term: true
    axis: 1      # scale separately for each channel
    num_axes: 1  # ... but not spatially (default)
    filler { type: 'constant' value: 1 }           # initialize scaling to 1
    bias_filler { type: 'constant' value: 0.001 }  # initialize bias
}}

Более подробную информацию можно найти в этой теме .

Прототип для развертывания

Главное изменение необходимо переключить use_global_stats на true . Это переключается на использование скользящей средней.

layer { bottom: 'layerx' top: 'layerx-bn' name: 'layerx-bn' type: 'BatchNorm'
  batch_norm_param {
    use_global_stats: true  # use pre-calculated average and variance
  }
  param { lr_mult: 0 } 
  param { lr_mult: 0 } 
  param { lr_mult: 0 }}
# channel-wise scale and bias are separate
layer { bottom: 'layerx-bn' top: 'layerx-bn' name: 'layerx-bn-scale' type: 'Scale',
  scale_param { 
    bias_term: true
    axis: 1      # scale separately for each channel
    num_axes: 1  # ... but not spatially (default)
}}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow