2017-09-10 5 views
1

Die SELU-Aktivierungsfunktion (https://github.com/bioinf-jku/SNNs/blob/master/selu.py) erfordert, dass der Eingang mit dem Mittelwert von 0,0 und der Varianz von 1,0 normalisiert wird. Daher habe ich versucht, tf.layers.batch_normalization (axis=-1) auf die Rohdaten anzuwenden, um diese Anforderung zu erfüllen. Die Rohdaten in jeder Charge haben die Form [batch_size, 15], wobei 15 sich auf die Anzahl der Features bezieht. Das folgende Diagramm zeigt die Varianzen von 5 dieser Features, die von tf.layers.batch_normalization zurückgegeben wurden (~ 20 Epochen). Sie sind nicht alle nahe 1.0 wie erwartet. Die Mittelwerte liegen auch nicht alle nahe 0,0 (Graphen nicht gezeigt).Verwenden Sie tf.layers.batch_normalization, um Eingaben für die SELU-Aktivierungsfunktion vorzuverarbeiten?

Wie soll ich die 15 Features alle unabhängig voneinander normalisiert bekommen (ich erwarte, dass jedes Feature nach Normalisierung Mittelwert = 0 und var = 1.0)?

enter image description here

Antwort

1

Nachdem die ursprünglichen Papiere von Chargen Normalisierung (https://arxiv.org/abs/1502.03167) und SELU (https://arxiv.org/abs/1706.02515) zu lesen, habe ich ein besseres Verständnis von ihnen:

  1. Batch-Normalisierung ist eine "Isolierung" Verfahren Stellen Sie sicher, dass die Eingabe (in jedem Minibatch) für die nächste Ebene eine feste Verteilung hat. Daher wird das Problem der "Verschiebungsvarianz" behoben. Die affine Transformation (γ * x^+ β) stimmt nur das standardisierte x^auf eine andere feste Verteilung für eine bessere Ausdruckskraft ab. Für die einfache Normalisierung müssen wir die center und scale Parameter zu False beim Aufruf tf.layers.batch_normalization drehen.

  2. Stellen Sie sicher, dass epsilon (immer noch in tf.layers.batch_normalization) auf mindestens 2 Größenordnungen kleiner als die niedrigste Größe aller Eingangsdaten eingestellt ist. Der Standardwert epsilon ist auf 0,001 festgelegt. Für meinen Fall haben einige Features Werte so niedrig wie 1e-6. Daher musste ich epsilon zu 1e-8 ändern.

  3. Die Eingaben in SELU müssen normalisiert werden, bevor sie in das Modell eingegeben werden. tf.layers.batch_normalization ist nicht für diesen Zweck ausgelegt.

Verwandte Themen