caffe
Normalizzazione batch
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)
}}