2017-02-19 248 views
0

我已經閱讀了一些其他文章,瞭解如何在培訓/驗證損失上得到nan時該怎麼做。我假設我的問題在我的學習率方面還沒有足夠的衰減,儘管我想知道是否有人可以只看一眼並同意/不同意。Tensorflow培訓/驗證損失nan問題

我在關注真棒博客文章here,但在tensorflow中實現。轉換模型相當容易,但動力和學習速度有點棘手,我認爲這是問題所在。我遇到了一些問題,我只能在損失上升到南方之前走上這麼多的時代。我使用的模型應該等同於博客教程中的net4/5。

... 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 

所以我已經看到了這一點,它似乎只是一個需要降低學習率的情況。它與教程編號不匹配,但令人擔憂。

博客文章的下一步是添加丟失。我已經在模型中實現了它,我只是通過一個張量布爾來告訴它是否訓練。所以在退出時我可以在150個以下的時間內找到nans,我不確定問題出在哪裏。既然它應該是正規化系統,我並不期待這種情況發生。

... 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 

有關啓用丟失時可能出現的問題的任何想法?我已經建立了完全相同的模型afaik,即使沒有nan問題,我的損失也不是很好。

我的代碼:https://github.com/sdeck51/CNNTutorials/blob/master/7.%20FacialFeatureDetection_Tutorial/FaceDetector.ipynb

編輯:

所以,我有我的卷積層設置不正確。我已經閱讀了這個教程。

InputLayer   (None, 1, 96, 96)  produces 9216 outputs 
Conv2DCCLayer   (None, 32, 94, 94)  produces 282752 outputs 
MaxPool2DCCLayer  (None, 32, 47, 47)  produces 70688 outputs 
Conv2DCCLayer   (None, 64, 46, 46)  produces 135424 outputs 
MaxPool2DCCLayer  (None, 64, 23, 23)  produces 33856 outputs 
Conv2DCCLayer   (None, 128, 22, 22)  produces 61952 outputs 
MaxPool2DCCLayer  (None, 128, 11, 11)  produces 15488 outputs 
DenseLayer   (None, 500)    produces  500 outputs 
DenseLayer   (None, 500)    produces  500 outputs 
DenseLayer   (None, 30)    produces  30 outputs 

和我剛剛更新了我的,所以我認爲它現在是相同的。

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) 

雖然仍然沒有工作。在卷積層和第一個完全連接的層上啓用了壓差後,該模型持續時間低於50個時期,然後錯誤通過屋頂。即使學習率很低,問題仍然存在。

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 

它看起來像非輟學方法打破,做同樣的事情> _> ...

編輯:我想我已經想通了這個問題。我正在使用動量優化算法,隨着時間推移增加動量。我認爲從這個小幅增長導致它超調。目前運行沒有輟學,但我獲得了更好的結果比以前有一個穩定的勢頭。我運行1000個紀元後,我要檢查它與退路

現在運行與退路,它並沒有炸燬,所以我想我已經解決了這個問題。

+0

好的,我在我的模型中發現了一個比較大的問題。我沒有正確設置卷積層參數,因此我要通過並確保這些參數是正確的,然後看看我是否仍然存在相同的問題。 – Exuro

回答

0

問題確實是優化器。我使用的是Momentum優化器,我將它初始設置爲.9,在它的時代週期結束時它應該變爲.999。由於某種原因,這種額外的勢頭正在造成天空火箭的損失。留下它爲.9解決了這個問題。