Zoeken…


Invoering

Uit de documenten :

"Normaliseert de invoer om een 0-gemiddelde en / of eenheid (1) variantie over de batch te hebben.

Deze laag berekent batchnormalisatie zoals beschreven in [1].

[...]

[1] S. Ioffe en C. Szegedy, "Batchnormalisatie: versnelling van diepe netwerktraining door interne Covariate Shift te verminderen." arXiv preprint arXiv: 1502.03167 (2015). "

parameters

Parameter Details
use_global_stats Uit de post van rohrbach van 2 maart 2016 - misschien weet hij:
(Use_global_stats) "Standaard berekent het netwerk tijdens de trainingstijd globale gemiddelde / variantie-statistieken via een lopend gemiddelde, dat vervolgens tijdens de testtijd wordt gebruikt om deterministische output voor elke input mogelijk te maken. U kunt handmatig schakelen of het netwerk accumuleert of de statistieken gebruikt via de optie use_global_stats BELANGRIJK: om deze functie te laten werken, MOET u de leersnelheid op nul zetten voor alle drie parameter-blobs, dwz param {lr_mult: 0} drie keer in de laagdefinitie.
(Use_global_stats) Dit betekent standaard (omdat het volgende is ingesteld in batch_norm_layer.cpp), u helemaal geen use_global_stats hoeft in te stellen in de prototxt. use_global_stats_ = this-> phase_ == TEST; "

Prototxt voor training

Het volgende is een voorbeelddefinitie voor het trainen van een BatchNorm-laag met kanaalschaal en bias. Gewoonlijk wordt een BatchNorm-laag ingevoegd tussen convolutie- en rectificatielagen. In dit voorbeeld zou de convolutie de blob layerx en de rectificatie de layerx-bn blob ontvangen.

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

Meer informatie is te vinden in deze thread .

Prototxt voor implementatie

De belangrijkste verandering die nodig is, is om use_global_stats op true . Dit schakelt over naar het voortschrijdend gemiddelde.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow