2017-02-19 10 views
0

Ich habe ein paar andere Beiträge hier gelesen, was zu tun ist, wenn Sie Nan auf Training/Validierung Verlust bekommen. Ich nehme an, mein Problem ist nicht genug Verfall in meiner Lernrate, obwohl ich mich frage, ob jemand nur einen Blick und zustimmen/nicht zustimmen konnte.Tensorflow Training/Validierung Verlust Nan Fragen

Ich folge dem tollen Blog Post here aber im Tensorflow implementieren. Es ist ziemlich einfach, das Modell umzuwandeln, aber die Dynamik und Lernrate ist ein bisschen schwieriger und ich denke, das ist das Problem. Ich habe Probleme, wo ich nur so viele Epochen gehen kann, bevor der Verlust aufgeht und zu Nan. Das Modell, das ich verwende, sollte net4/5 im Blog-Tutorial entsprechen.

... Epoch /Time/Train Loss/Valid Loss/Learn Rate 
Epoch[ 900]0:14:11 0.000116 0.001566 0.027701 
Epoch[ 910]0:14:20 0.000107 0.001565 0.026593 
Epoch[ 920]0:14:29 0.000098 0.001564 0.026593 
Epoch[ 930]0:14:39 0.000088 0.001567 0.026593 
Epoch[ 940]0:14:48 0.000080 0.001567 0.026593 
Epoch[ 950]0:14:58 0.000069 0.001578 0.026593 
Epoch[ 960]0:15: 7 0.000072 0.001600 0.026593 
Epoch[ 970]0:15:17 0.000105 0.001664 0.026593 
Epoch[ 980]0:15:26 0.000221 0.001799 0.026593 
Epoch[ 990]0:15:35 0.000456 0.002045 0.026593 
Epoch[1000]0:15:45 0.000955 0.002473 0.025530 
Epoch[1010]0:15:54 0.002148 0.003415 0.025530 
Epoch[1020]0:16: 4 0.008455 0.009337 0.025530 
Epoch[1030]0:16:13 0.009042 0.010412 0.025530 
Epoch[1040]0:16:22 nan nan 0.025530 

Also ich habe das gesehen und es scheint, als ob es nur ein Fall der Notwendigkeit ist, die Lernrate an diesem Punkt zu senken. Es passt jedoch nicht gut zu den Tutorials, was beunruhigend ist.

Der nächste Schritt im Blogpost ist das Hinzufügen von Dropout. Ich habe es bereits in das Modell implementiert, wo ich einfach einen Tensor Bool passiere, um ihm zu sagen, ob er trainiert hat oder nicht. Mit Dropout kann ich Nans in weniger als 150 Epochen bekommen und ich bin mir nicht sicher, was das Problem ist. Da es das System regularisieren soll, habe ich nicht erwartet, dass dies geschieht.

... Epoch /Time/Train Loss/Valid Loss/Learn Rate 
Epoch[ 0]0: 0: 1 0.025211 0.025614 0.045000 
Epoch[ 10]0: 0:11 0.003496 0.004075 0.045000 
Epoch[ 20]0: 0:22 0.003202 0.003742 0.045000 
Epoch[ 30]0: 0:32 0.003169 0.003712 0.045000 
Epoch[ 40]0: 0:42 0.003084 0.003605 0.045000 
Epoch[ 50]0: 0:53 0.002976 0.003507 0.045000 
Epoch[ 60]0: 1: 3 0.002891 0.003437 0.045000 
Epoch[ 70]0: 1:14 0.002795 0.003381 0.045000 
Epoch[ 80]0: 1:24 0.002648 0.003317 0.045000 
Epoch[ 90]0: 1:34 0.002408 0.003181 0.011250 
Epoch[ 100]0: 1:45 0.002267 0.003107 0.011250 
Epoch[ 110]0: 1:55 0.001947 0.003003 0.011250 
Epoch[ 120]0: 2: 6 0.004507 0.005768 0.011250 
Epoch[ 130]0: 2:16 nan nan 0.011250 

Irgendwelche Gedanken zu den Problemen mit Dropout aktiviert? Ich habe das exakt gleiche Modell afaik gebaut, obwohl auch ohne die Nanoprobleme meine Verluste nicht so gut sind.

Mein Code: https://github.com/sdeck51/CNNTutorials/blob/master/7.%20FacialFeatureDetection_Tutorial/FaceDetector.ipynb

EDIT:

So habe ich meine Faltungs Schichten falsch eingestellt. Ich bin über das Tutorial gegangen, das das hat.

und ich habe gerade meine aktualisiert, so denke ich, es ist jetzt das gleiche.

conv: input size: (?, 96, 96, 1) 
pool: input size: (?, 94, 94, 32) 
conv: input size: (?, 47, 47, 32) 
pool: input size: (?, 46, 46, 64) 
conv: input size: (?, 23, 23, 64) 
pool: input size: (?, 22, 22, 128) 
fc: input size before flattening: (?, 11, 11, 128) 
fc: input size: (?, 15488) 
fc: input size: (?, 500) 
fc: input size: (?, 500) 
out: (?, 30) 

Immer noch nicht funktioniert. Wenn das Dropout auf den Faltungsschichten und der ersten vollständig verbundenen Schicht aktiviert ist, dauert das Modell weniger als 50 Epochen und der Fehler geht durch das Dach. Selbst bei sehr kleinen Lernraten tritt das Problem immer noch auf.

Epoch[ 0]0: 0: 1 0.029732 0.030537 0.030000 
Epoch[ 10]0: 0:11 0.004211 0.004986 0.030000 
Epoch[ 20]0: 0:20 0.003013 0.003530 0.004500 
Epoch[ 30]0: 0:30 5.250690 5.426279 0.004500 
Epoch[ 40]0: 0:40 nan nan 0.000675 

Und es sieht aus wie die nicht-Dropout-Methode gebrochen ist und das gleiche tun> _> ...

EDIT: Ich glaube, ich habe das Problem herausgefunden. Ich verwende einen Impulsoptimierungsalgorithmus, der das Momentum im Laufe der Zeit erhöht. Ich denke, dass der kleine Anstieg dazu führte, dass es überschwang. Momentan laufe ich ohne Dropout, aber ich erziele bessere Ergebnisse als zuvor, da ich einen konstanten Schwung habe. Nachdem ich 1000 Epochen gelaufen bin, werde ich es mit Dropout

Running mit Dropout jetzt und es ist nicht sprengen, so denke ich, ich habe das Problem behoben.

+0

Ok, also habe ich ein großes Problem in meinem Modell gefunden.Ich habe die Parameter für die Faltungsschicht nicht korrekt eingerichtet, also werde ich einen Durchlauf machen und sicherstellen, dass diese korrekt sind, und dann sehen, ob ich immer noch dieselben Probleme habe. – Exuro

Antwort

0

Das Problem war in der Tat der Optimierer. Ich verwende Momentum Optimizer und ich habe es zunächst auf .9 eingestellt und sollte gegen Ende seiner Epochenzyklen .999 werden. Aus irgendeinem Grund verursacht der zusätzliche Schwung den Verlust der Himmelsrakete. Wenn Sie den Wert .9 beibehalten, wird das Problem behoben.

Verwandte Themen