caffe
Normalización de lotes
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)
}}