Ricerca…


introduzione

Dai documenti :

"Normalizza l'input per avere varianza 0 e / o unità (1) attraverso il batch.

Questo livello calcola la normalizzazione batch come descritto in [1].

[...]

[1] S. Ioffe e C. Szegedy, "Normalizzazione del lotto: accelerando l'addestramento di reti profonde riducendo il Covariate Shift interno". arXiv preprint arXiv: 1502.03167 (2015). "

Parametri

Parametro Dettagli
use_global_stats Dal post di rohrbach dal 2 marzo 2016 - forse lui sa:
(use_global_stats) "Per impostazione predefinita, durante il tempo di allenamento, la rete sta calcolando le statistiche globali media / varianza tramite una media corrente, che viene quindi utilizzata al momento del test per consentire gli output deterministici per ciascun input.È possibile alternare manualmente se la rete si sta accumulando o utilizzando le statistiche tramite l'opzione use_global_stats. IMPORTANTE: affinché questa funzionalità funzioni, è necessario impostare la velocità di apprendimento su zero per tutti e tre i blob dei parametri, ovvero param {lr_mult: 0} per tre volte nella definizione del livello.
(use_global_stats) Ciò significa per impostazione predefinita (come impostato in batch_norm_layer.cpp), non è necessario impostare use_global_stats nel prototesto. use_global_stats_ = this-> phase_ == TEST; "

Prototxt per l'allenamento

Di seguito è riportata una definizione di esempio per la formazione di un layer BatchNorm con scala e bias in base al canale. In genere un layer BatchNorm viene inserito tra i livelli di convoluzione e di rettifica. In questo esempio, la convoluzione emetterebbe il blob layerx e la rettifica riceverebbe il 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
}}

Ulteriori informazioni possono essere trovate in questa discussione .

Prototesto per la distribuzione

Il cambiamento principale necessario è passare a use_global_stats su true . Passa all'utilizzo della media 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)
}}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow