[PYTHON] Es ist besser, den Weight Initializer zu verwenden, wenn Sie mit HeNormal mit Chainer initialisieren

Was ist HeNormal?

Eine der Initialisierungsmethoden für Gewichtskoeffizienten, auch als "MSRA" bekannt. Es wird in Artikel von Kaiming He et al. verwendet, und es scheint, dass der Autor und Microsoft Research der Ursprung des Namens sind.

HeNormal initialisiert den Gewichtungsfaktor $ W $ mit einer Zufallszahl, die einer Normalverteilung mit einer Standardabweichung von $ \ sqrt {2 / N} $ folgt. Hier ist $ N $ die Größe der Eingabe, dh die Größe des Eingabevektors im Fall von "links.Linear" und die Anzahl der Kanäle x Kernelhöhe x Kernelbreite im Fall von "links.Convolution2D".

Ist es nicht möglich, wscale anzugeben?

Als Methode zum Initialisieren mit HeNormal kann beim Erstellen einer Linkinstanz "math.sqrt (2)" für "wscale" angegeben werden. Geben Sie beispielsweise "chainer.links.Linear (100, 100, wscale = math.sqrt (2))" an. Diese Methode wird auch im Network-in-Network-Modell im ImageNet-Beispiel von Chainer (https://github.com/pfnet/chainer/blob/master/examples/imagenet/nin.py) verwendet. Es stellt sich jedoch heraus, dass sich das Verhalten von wscale gegenüber Version 1.9.0 unbeabsichtigt geändert hat. Ich habe bereits ein Problem registriert. wscale doesn't have backward compatibility Wenn Sie HeNormal explizit verwenden möchten, sollten Sie es vermeiden, es mit "wscale" anzugeben, bis dieses Problem behoben ist.

Zum Beispiel, wenn Sie beim Veröffentlichen des Ergebnisses mithilfe der Chainer-Implementierung "Mit HeNormal initialisiert" sagen oder wenn Sie HeNormal für die Recherche anderer Teams verwenden und die Initialisierungsmethode für die Reproduktion festlegen möchten. Ich denke, es ist besser, Weight Initializer wie unten beschrieben zu verwenden.

Verwendung von Weight Initializer

In Chainer können Sie mithilfe des Weight Initializer festlegen, wie der Gewichtskoeffizient initialisiert werden soll. Geben Sie zum Initialisieren mit dem Initializer eine Instanz des Initialisierers in "initialW" des Links an. Beispiel:

class MLP(chainer.Chain):

    def __init__(self, n_in, n_units, n_out):
        initializer = chainer.initializers.HeNormal()
        super(MLP, self).__init__(
            l1=L.Linear(None, n_units, initialW=initializer),  # n_in -> n_units
            l2=L.Linear(None, n_units, initialW=initializer),  # n_units -> n_units
            l3=L.Linear(None, n_out, initialW=initializer),  # n_units -> n_out
        )

    ...

Verweise

  1. Kaiming He el al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification,(2015)

Recommended Posts

Es ist besser, den Weight Initializer zu verwenden, wenn Sie mit HeNormal mit Chainer initialisieren
Wenn Sie es so verwenden möchten, wie es ist, wenn Sie es mit Lambda-Memo verwenden
Es ist bequemer, csv-table zu verwenden, wenn Sie eine Tabelle mit Python-Sphinx schreiben
Wenn Sie eine SSD mit Linux verbinden und einen Dateiserver erstellen, ist es besser, NTFS zu verwenden.
Wenn es schwierig ist, das zu kopieren, was Sie mit vue erstellt haben
Wird nicht empfohlen, pip direkt zu verwenden?
Bequem zum Verwenden von Ebenen beim Laden von Bibliotheken auf Lambda
[OpenCV] Wenn Sie überprüfen möchten, ob es mit imread richtig gelesen wird
Autoencoder im Chainer (Hinweise zur Verwendung von + Trainer)
Scraping mit Python-Selen ist alt! ?? ・ ・ ・ Verwendung von Pyppeteer
Verwenden Sie Tensorboard mit Chainer
Wenn es schwierig ist, beim Senden von E-Mails mit Python lokal einen SMTP-Server einzurichten.
[Python] Was ist ein Tupel? Erklärt, wie man es benutzt und wie man es benutzt, ohne zu tippen.
Immerhin ist es falsch, mit Python-Subprozess zu katzen.
Ist es möglich, ähnliche Bilder nur mit ImageHash zu erkennen?
Wenn ich versuche, mit Heroku zu pushen, funktioniert es nicht
[Python] Hinweise beim Versuch, Numpy mit Cython zu verwenden
Verwenden Sie aggdraw, wenn Sie mit Kissen schön zeichnen möchten
[C-Sprache] Close () Es ist gefährlich, es erneut zu versuchen, wenn es fehlschlägt
[Python] Was ist ein Slice? Eine leicht verständliche Erklärung zur Verwendung anhand eines konkreten Beispiels
[Python] Was ist Pip? Erläutern Sie die Befehlsliste und deren Verwendung anhand aktueller Beispiele
Das Deep Learning-Framework "CNTK" von Microsoft ist jetzt mit Python kompatibel, was die Verwendung erheblich vereinfacht
Verwendung von Chainer mit Jetson TK1
Ein Memorandum beim automatischen Erwerb mit Selen
Wenn ich versuche, pip zu verwenden, ist das SSL-Modul nicht verfügbar.