我已經閱讀了一些其他文章,瞭解如何在培訓/驗證損失上得到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問題,我的損失也不是很好。
編輯:
所以,我有我的卷積層設置不正確。我已經閱讀了這個教程。
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個紀元後,我要檢查它與退路
現在運行與退路,它並沒有炸燬,所以我想我已經解決了這個問題。
好的,我在我的模型中發現了一個比較大的問題。我沒有正確設置卷積層參數,因此我要通過並確保這些參數是正確的,然後看看我是否仍然存在相同的問題。 – Exuro