Die Verlustfunktion nimmt ab, aber die Genauigkeit des Zugsatzes ändert sich im Tensorflow nicht

8

Ich versuche, einen einfachen Gender-Klassifikator zu implementieren, der tiefe faltbare neuronale Netzwerke mit Tensorflow verwendet. Ich habe dieses Modell gefunden und implementiert.

%Vor%

Was ich an dieser Stelle notieren muss, ist, dass ich auch alle Vorverarbeitungsschritte durchgeführt habe, die in der Arbeit beschrieben sind, aber meine Bilder werden auf 100x100x3 statt 277x277x3 skaliert.

Ich habe die Logits als [0,1] für Frauen und [1,0] für Männer

definiert %Vor%

Und habe den Trainingsablauf wie folgt definiert:

%Vor%

Die Hälfte des obigen Codes dient nur dazu, Test- und Zuggenauigkeiten alle 2 Epochen auszugeben.

Jedenfalls beginnt der Verlust in der ersten Epoche hoch

  

('Epoche', 0, 'Verlust:', 148.87030902462453)

     

('Epoche', 1, 'Verlust:', 0.01549744715988636)

     

('Genauigkeit nach', 2, 'Epochen im Test-Set:', 0.33052011888510396)

     

('Genauigkeit nach', 1, 'Epochen im Zugverband:', 0.49607501227222384)

     

('Epoche', 2, 'Verlust:', 0.015493246909976005)

Was vermisse ich?

und fährt so fort, die Genauigkeit bei 0.5 für Zug-Satz bleibend.

BEARBEITEN: Die Funktionen words variable, conv2d und max_pool_nn sind

%Vor%

BEARBEITEN 2 - Problem gelöst

Das Problem war faszinierend mit der Parameterinitialisierung verbunden. Das Ändern der Gewichtsinitialisierung von der Normalverteilung auf die Xavier-Initialisierung hat Wunder bewirkt und die Genauigkeit endete bei ungefähr 86%. Wenn jemand hier interessiert ist, ist das Originalpapier Ссылка , wenn jemand weiß und sich interessiert, genau zu erklären, warum Xavier funktioniert gut mit Convnets und Bilder fühlen sich frei, eine Antwort zu posten.

    
Vahagn Tumanyan 05.08.2017, 10:48
quelle

1 Antwort

1

Die richtige Initialisierung von Gewichten ist oft entscheidend, um tiefere neuronale Netze zu trainieren.

Die Xavier-Initialisierung wird mit dem Ziel abgeleitet, sicherzustellen, dass die Varianz der Ausgabe bei jedem Neuron zu 1,0 erwartet wird (siehe hier ). Dies beruht im Allgemeinen auf der zusätzlichen Annahme, dass Ihre Eingaben standardisiert sind, um Mittelwert 0 und Varianz von 1 zu haben, also ist es wichtig, dies auch sicherzustellen.

Für ReLU-Einheiten glaube ich, Er Initialisierung gilt als Best Practice. Dies erfordert die Initialisierung von einer Null-Mittelwert-Gaußverteilung mit Standardabweichung:

Dabei ist n die Anzahl der Eingabeeinheiten. In den Lasagne-Dokumenten finden Sie die Best Practices für einige andere Aktivierungsfunktionen.

Nebenbei bemerkt, kann die Batch-Normalisierung oft die Abhängigkeit der Modellleistung von der Gewichtinitialisierung verringern.

    
nlml 11.08.2017 21:12
quelle