caffe
Normalisation par lots
Recherche…
Introduction
De la documentation :
"Normalise l’entrée pour obtenir une variance moyenne et / ou unitaire (1) dans le lot.
Cette couche calcule la normalisation par lots comme décrit dans [1].
[...]
[1] S. Ioffe et C. Szegedy, "Normalisation par lots: Accélération de la formation en réseau profond en réduisant le décalage interne des covariables". arXiv preprint arXiv: 1502.03167 (2015). "
Paramètres
| Paramètre | Détails |
|---|---|
| use_global_stats | D'après le post de rohrbach du 2 mars 2016 - peut-être qu'il sait: |
| (use_global_stats) | "Par défaut, pendant le temps d’entraînement, le réseau calcule des statistiques de moyenne / variance globales via une moyenne mobile, qui est ensuite utilisée au moment du test pour autoriser des sorties déterministes pour chaque entrée. via l'option use_global_stats IMPORTANT: pour que cette fonctionnalité fonctionne, vous DEVEZ définir le taux d'apprentissage à zéro pour les trois blobs de paramètres, c'est-à-dire param {lr_mult: 0} trois fois dans la définition de la couche. |
| (use_global_stats) | Cela signifie que par défaut (comme suit est défini dans batch_norm_layer.cpp), vous n'avez pas besoin de définir use_global_stats dans le prototxt. use_global_stats_ = this-> phase_ == TEST; " |
Prototxt pour la formation
Vous trouverez ci-dessous un exemple de définition pour l'entraînement d'une couche BatchNorm avec une échelle et un biais au niveau des canaux. Généralement, une couche BatchNorm est insérée entre les couches de convolution et de rectification. Dans cet exemple, la convolution produirait le layerx et la rectification recevrait le 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
}}
Plus d'informations peuvent être trouvées dans ce fil .
Prototxt pour le déploiement
Le principal changement nécessaire consiste à basculer use_global_stats sur true . Cela passe en utilisant la moyenne mobile.
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)
}}