Die letzte Schicht von Inception-ResNet-v2 wird neu trainiert

9

Ich versuche die letzte Schicht von inception-resnet-v2 neu zu trainieren. Folgendes habe ich mir ausgedacht:

  1. Erhalte Namen von Variablen in der letzten Ebene
  2. Erstellen Sie ein train_op , um nur diese Variablen mit Verlust zu minimieren
  3. Stellen Sie die gesamte Grafik mit Ausnahme der letzten Ebene wieder her, während Sie nur die letzte Ebene nach dem Zufallsprinzip initialisieren.

Und ich habe das wie folgt implementiert:

%Vor%

Dies scheint nicht zu funktionieren (Trainingsverlust, Fehler verbessern sich nicht viel von den anfänglichen Werten). Gibt es eine bessere / elegante Möglichkeit, dies zu tun? Es wäre gut für mich zu lernen, wenn du mir auch sagen kannst, was hier schief läuft.

    
Priyatham 31.12.2016, 09:34
quelle

1 Antwort

1

Es gibt mehrere Dinge:

  • Wie ist die Lernrate? ein zu hoher Wert kann sich mit allem vermischen (wahrscheinlich nicht der Grund)
  • Versuche stochastischen Gradientenabfall zu verwenden, du solltest weniger Probleme haben
  • ist der Umfang korrekt eingestellt? Wenn Sie die L2-Regularisierung und die Batch-Normalisierung der Gradienten nicht verwenden, können Sie sehr schnell in ein lokales Minimum fallen und das Netzwerk kann nicht lernen

    %Vor%
  • Sie sollten die Regularisierungsvariablen zum Verlust hinzufügen (oder zumindest die der letzten Ebene):

    %Vor%
  • Training nur die volle verbundene Schicht ist vielleicht keine gute Idee, ich würde das gesamte Netzwerk trainieren, da die Funktionen, die Sie für Ihre Klasse benötigen, nicht unbedingt in der letzten Schicht definiert sind, aber wenige Schichten vorher und Sie müssen ändere sie.

  • überprüfe die train_op nach dem Verlust:

    %Vor%
jorgemf 06.01.2017 20:54
quelle