作者st1009 (前端攻城師)
看板Python
標題[問題] 深度學習(deep learning)出問題
時間Thu Sep 21 00:45:55 2017
各位前輩大大們好<(_ _)>
我使用Google提供的tensorflow,
並且修改網路上提供的範例,
進行類神經網路深度學習的製作,
其實...我只有實驗2層時,算是成功的,但是想要進入深度學習的領域,
增加隱藏層時,出了問題QAQ
使用relu計算隱藏層,sigmoid計算最後結果,
我的數值不知道為甚麼,沒有乖乖的修正,全部都變成1了...
我也有試著全用sigmoid計算,但結果是全部為0,
就算把每層節點數增加到300個,好像也沒有幫助
我試著觀察權重,發現權重好像都沒有更新...
聽說...別人可以做到146層(?
人家怎麼10層就進行不下去了啦TAT
以下是我的程式碼
https://pastebin.com/JZryY82w
貴求各位先進提點我出了甚麼問題,我該如何修正m(_ _)m
--
往昔所造諸罪業
皆由無始貪瞋癡
從身語意之所生...
一切,我今皆懺悔!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.157.60
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1505925975.A.AE1.html
1F:推 f496328mm: 幫你推 我是用 Keras 用 TF 是不是比較厲害? 09/21 01:15
應該還好吧(////▽////)
主要是在FB上面看到就用了>///<
2F:推 tsoahans: 一般網路不能疊那麼多層吧 resnet之類的特殊架構才能疊 09/21 01:22
3F:→ tsoahans: 到一百多層 09/21 01:22
4F:推 tsoahans: 你可以查看看 dying relu problem 09/21 01:26
有查過,我再多查查
5F:推 KyotoAnime: 試試看add layer不要用函數包? 直接寫 09/21 03:25
6F:→ KyotoAnime: 10層會不會要跑很久啊.. 09/21 03:26
我用1050Ti執行GPU運算,10層10w迴圈大約也在3min內,感覺還好
7F:推 johnny78615: 用leakyrelu試試?解決 relu死掉的現象 09/21 05:53
有試過,但...沒有效果
8F:推 ebullient: 把loss改成logistic跟lr改成decay跑100000epoch可以練 09/21 09:36
9F:→ ebullient: 起來 09/21 09:36
不是很清楚怎改...我會研究看看!
請問您所說的lr是學習率?不是很清楚如何把我的loss改成logistic...
您說的logistic是指x - x * z + log(1 + exp(-x))嗎?
10F:推 ebullient: goo.gl/t1L7Q3這個loss function,lr是學習率 09/21 10:48
好的,非常感謝您 <3
11F:推 brightwish: initialize_all_variable 怎麼做的 有用random嗎 09/21 13:09
這是tf給予的函式,好像沒有random,但程式的其他地應該有對變數進行沒錯
12F:→ brightwish: sigmoid 就是 logistic 09/21 13:12
謝謝您!
13F:推 joeyccc1: xavier initializer 09/21 14:04
14F:→ joeyccc1: or batch normalization 09/21 14:05
好的,謝謝您!我會再添加相關設定!
15F:推 vfgce: hidden layer用relu, output layer用softmax.... 09/21 19:24
之前因為沒發現sigmoid跟softmax明顯差距,所以就用sigmoid了,之後會改用softmax,
謝謝您的建議!
16F:→ pipidog: 不確定其他的問題,但看到幾點問題: 1.有人會output用 09/22 02:00
17F:→ pipidog: sigmoid嗎? 如果你是做分類問題,應該用softmax,這兩者功 09/22 02:00
18F:→ pipidog: 用完全不同 09/22 02:01
之所以會用是因為一開始學習時都是看到sigmoid,也真的有部份教學用sigmoid,
所以不小心就誤用了>"<
謝謝提醒<(_ _)>
19F:→ pipidog: 2.如果是新版TF,initialize_all_variabel已經09/22 02:01
20F:→ pipidog: 不支援了,最好也改掉. 09/22 02:01
當時找到這個範例最方便套用,
試用也沒有問題,一時沒想到會有版本新舊問題,感謝您!
21F:→ pipidog: 3.看起來你對神經網路還很陌生,我 09/22 02:01
22F:→ pipidog: 建議你可以先用Keras實作,而不要一開始就碰TF,你會比較懂 09/22 02:02
23F:→ pipidog: 神經網路的模型,然後你再去搞懂TF,因為看起來你對於怎麼 09/22 02:02
24F:→ pipidog: 搭建神經網路都還不太熟,就被困在TF的語法裡面了. 09/22 02:03
25F:→ pipidog: 最後一提,一般對於多層感知器(就是你在做的事情),增加層 09/22 02:05
26F:→ pipidog: 數到這麼多意義不大,一般一兩層就可以了,但節點可以多一 09/22 02:05
27F:→ pipidog: 些.用太多層,會導致後向傳播時要處理的參數幾何式增長,計 09/22 02:07
我以前聽教學說雖然沒有一定,但節點數通常為輸入的1.5倍,我實驗原本輸入是8筆
所以就沒想到調節點數了>"<
非常感謝您無私的教導 m(_ _)m
28F:推 kaneson: 10層dnn任一條x->y的路徑相當於乘了10次weight, 你的inpu 09/22 02:38
29F:→ kaneson: t在0.7附近, 初始weights用random normal預設也在 0 附 09/22 02:38
30F:→ kaneson: 近(-1,1), 這樣後面output應該都是0,所以我覺得train不 09/22 02:38
31F:→ kaneson: 出東西來 09/22 02:38
32F:推 kaneson: 所謂疊幾十上百層的是CNN,架構有其原理與作用,也有很多 09/22 02:52
33F:→ kaneson: 不同技巧解決梯度消失的問題。其實最尾巴接上的full-conn 09/22 02:52
34F:→ kaneson: ected layer與softmax組成的分類器也很少會超過二,三層 09/22 02:52
35F:→ kaneson: 。 09/22 02:52
36F:推 kaneson: 還有像樓上所說的剛開始建議先玩Keras, 一方面比較方便 09/22 03:00
37F:→ kaneson: 拼接出不同典型model來比較看看,而且TF本身api很亂寫起 09/22 03:00
38F:→ kaneson: 來也較不直覺。 09/22 03:00
我原本以為...BP會把一切問題都解決的...輸出結果錯誤,所以就把權重修正到合理範圍
,但沒想到...原來BP好像有個修正的極限(?
其實其實我窩窩當初是想要做成CNN的,但研究一段時間不知道怎寫出來,
而且我要研究資料好像也不合適用CNN,所以才放棄的>////<
因為我當時剛接觸時,手邊資料很亂...我基本上要再3天內實做出基本能跑的DL...
所以工具看到了就用...沒想到有名的Google出的工具這底層,
其實我也是現在才接觸到Keras的,或許我當初早點接觸到,就不會用TF了 >"<
39F:推 jack529: 感覺是層數太深,資料太少,導致gradient沒有變化,可以 09/22 18:19
40F:→ jack529: 看看Loss有沒有降低~ 09/22 18:19
似乎...沒有降低...我正在研究把Loss改成怎樣好
有位大大幫我做了一些修正,現在問題已解決,謝謝大家的幫助與支持,
接下來我會慢慢吸收這段時間大家提供給我的資訊,
感謝大家m(_ _)m
41F:推 jack529: 期待後續xd 推薦看看Coursera,Andrew大大開的Deep Learn 09/23 15:57
42F:→ jack529: ing,看完會更有感覺! 09/23 15:57
嗯,我英文苦手QAQQQ
不過還是感謝大大給我這個學習的機會 <3
後續嘛~原則上希望不要再有問題了 :P
43F:推 Kazimir: 好像太晚看到了XD 我猜大概是lr和sdv太高把relu弄死了 09/25 02:07
是說其實我到現在還不是很清楚lr設多少比較好,要如何判斷...
可用的lr比我逾期的低了100倍以上...
44F:推 f496328mm: lr 你設多少? 可以從 1e-5 開始往前走 09/25 16:23
很想知道設這數值的原因...我目前也是差不多設這數值再修
但以前看教學,0.9都有人設了...說學比較快
我真正參考的範例是0.1,完全無法想像1e-5
45F:推 Kazimir: 如果你使用標準的微分法 那lr就只能試了 理論上來說 09/25 18:58
46F:→ Kazimir: 先大後小比較好 一般我都是從0.01開始 不過牽涉很多因素 09/25 18:59
47F:→ Kazimir: 所以用adam比較方便.. 常常也比手動調整好一點 09/25 19:00
我目前就是使用AdamOptimizer,我也聽說先大後小比較好,但relu一直死掉...
經過版上大大改過,才知道要小到1e-5....
目前不知道要怎求出學習率,
我只找出一個小規律,就是如果學習率*訓練次數大於1好像會死....
48F:推 joeyccc1: 其實我第一個發現的地方是你沒有觀察cost所以只能猜或 09/26 04:18
49F:→ joeyccc1: 者找不到錯誤在哪,但是我自己做ml也是慢慢試LR 09/26 04:18
嗯,謝謝大大提醒!
所以層數,節點數,訓練次數也是自己慢慢試囉Q
m(_ _)m
50F:推 Kazimir: 對於層數 某大牛(好像是Bengio)有說過 你就一直加深 09/27 01:33
51F:→ Kazimir: 直到結果不再改善為止XD 所以基本上只能試了 09/27 01:34
好的,謝謝您!總之就是慢慢觀察結果進行微調了,謝謝 <(_ _)>
※ 編輯: st1009 (1.164.93.71), 09/27/2017 19:51:52