caffe
Batch-Normalisierung
Suche…
Einführung
Aus den Dokumenten :
Msgstr "" "Normalisiert die Eingabe so, dass die Abweichung zwischen 0 - Mittelwert und / oder Einheit (1) im Stapel liegt.
Diese Schicht berechnet die Stapel-Normalisierung wie in [1] beschrieben.
[...]
[1] S. Ioffe und C. Szegedy, "Batch-Normalisierung: Beschleunigung des tiefen Netzwerktrainings durch Verringerung der internen kovariaten Verschiebung." arXiv preprint arXiv: 1502.03167 (2015). "
Parameter
| Parameter | Einzelheiten |
|---|---|
| use_global_stats | Aus Rohrbachs Beitrag vom 2. März 2016 - vielleicht weiß er: |
| (use_global_stats) | "Standardmäßig berechnet das Netzwerk während des Trainings die Durchschnittswerte / Abweichungsstatistiken über einen laufenden Durchschnitt. Dieser Wert wird dann zur Testzeit verwendet, um deterministische Ausgaben für jeden Eingang zuzulassen. Sie können manuell umschalten, ob sich das Netzwerk sammelt oder die Statistiken verwendet über die Option use_global_stats WICHTIG: Damit diese Funktion funktioniert, MÜSSEN Sie die Lernrate für alle drei Parameterblobs auf null setzen, dh param {lr_mult: 0} dreimal in der Ebenendefinition. |
| (use_global_stats) | Dies bedeutet standardmäßig (da das Folgende in batch_norm_layer.cpp festgelegt ist), müssen Sie use_global_stats im prototxt nicht festlegen. use_global_stats_ = this-> phase_ == TEST; " |
Prototxt für das Training
Im Folgenden finden Sie eine Beispieldefinition für das Training eines BatchNorm-Layers mit kanalweiser Skalierung und Neigung. Normalerweise wird eine BatchNorm-Schicht zwischen Faltungs- und Rektifikationsschicht eingefügt. In diesem Beispiel würde die Faltung den Blob- layerx und die Gleichrichtung würde den layerx-bn Blob erhalten.
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
}}
Weitere Informationen finden Sie in diesem Thread .
Prototxt für die Bereitstellung
Die wichtigste Änderung besteht darin, use_global_stats auf true . Dadurch wird der gleitende Durchschnitt verwendet.
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)
}}