Buscar..


Introducción

De la documentación :

"Normaliza la entrada para tener una variación de 0 media y / o unidad (1) en el lote.

Esta capa calcula la normalización por lotes como se describe en [1].

[...]

[1] S. Ioffe y C. Szegedy, "Normalización de lotes: Aceleración de la capacitación profunda en la red mediante la reducción del cambio interno de covarianza". arXiv preimpresión arXiv: 1502.03167 (2015). "

Parámetros

Parámetro Detalles
use_global_stats De la publicación de rohrbach del 2 de marzo de 2016 , quizás él sepa:
(use_global_stats) "De manera predeterminada, durante el tiempo de entrenamiento, la red está calculando estadísticas de media / varianza global a través de un promedio de ejecución, que luego se usa en el tiempo de prueba para permitir salidas deterministas para cada entrada. Puede alternar manualmente si la red se está acumulando o usando las estadísticas a través de la opción use_global_stats. IMPORTANTE: para que esta función funcione, DEBE establecer la velocidad de aprendizaje en cero para los tres parámetros de blobs, es decir, param {lr_mult: 0} tres veces en la definición de capa.
(use_global_stats) Esto significa que, de forma predeterminada (como se establece a continuación en batch_norm_layer.cpp), no tiene que establecer use_global_stats en absoluto en el prototxt. use_global_stats_ = this-> phase_ == TEST; "

Prototexto para la formación.

La siguiente es una definición de ejemplo para entrenar una capa BatchNorm con escala y sesgo en cuanto al canal. Normalmente, una capa BatchNorm se inserta entre las capas de convolución y rectificación. En este ejemplo, la convolución generaría el blob layerx y la rectificación recibiría el blob 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
}}

Más información se puede encontrar en este hilo .

Prototxt para la implementación

El cambio principal necesario es cambiar use_global_stats a true . Esto cambia al uso de la media móvil.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow