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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow