caffe
Batchnormalisering
Sök…
Introduktion
Från dokumenten :
"Normaliserar ingången för att ha 0-medelvärde och / eller enhetsvarians över batch.
Detta lager beräknar batchnormalisering som beskrivs i [1].
[...]
[1] S. Ioffe och C. Szegedy, "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift." arXiv förtryck arXiv: 1502.03167 (2015). "
parametrar
| Parameter | detaljer |
|---|---|
| use_global_stats | Från rohrbachs inlägg från 2 mars 2016 - kanske han vet: |
| (use_global_stats) | "Som standard beräknar nätverket globala medel / variansstatistik under träningstid via ett löpande medelvärde, som sedan används vid testtid för att tillåta deterministiska utgångar för varje ingång. Du kan manuellt växla om nätverket ackumuleras eller använder statistiken via alternativet use_global_stats. VIKTIGT: för att den här funktionen ska fungera, MÅSTE du ställa in inlärningsfrekvensen till noll för alla tre parameteruppsatser, dvs. param {lr_mult: 0} tre gånger i lagerdefinitionen. |
| (use_global_stats) | Detta betyder som standard (eftersom följande är inställt i batch_norm_layer.cpp), du behöver inte ställa in use_global_stats alls i prototypen. use_global_stats_ = this-> phase_ == TEST; " |
Prototxt för träning
Följande är en exempeldefinition för att träna ett BatchNorm-lager med kanalvis skala och förspänning. Typiskt infogas ett BatchNorm-lager mellan lager och upplösning. I det här exemplet skulle layerx mata ut layerx och rektifieringen skulle få 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
}}
Mer information finns i den här tråden .
Prototxt för distribution
Den viktigaste förändringen som behövs är att växla use_global_stats till true . Detta växlar till att använda det rörliga medelvärdet.
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)
}}