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)
}}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow