作者thefggeuck (eggggg)
看板DataScience
標題[問題] CNN無法收斂
時間Wed Oct 26 21:07:33 2022
ctrl + y 可以刪除一整行,請將不需要的內容刪除
文章分類提示:
- 問題: 當你想要問問題時,請使用這個類別。
- 討論: 當你自己已經有答案,但是也想聽聽版友意見時。
- 情報: 當你看到消息時,請使用這個類別。
根據板規規定,做適當的轉換,以及摘錄重要文意。
- 心得: 當你自己想要分享經驗時,請使用這個類別。
(回答並非義務,所以當有人回答時,哪怕句謝謝也好,多多回應,大E可編輯文章)
可以試著把程式碼用網站貼出來唷 https://pastebin.com/
(如果用不到以下框架,如觀念問題請自行視情況刪除作業系統,使用工具等項目)
作業系統:(ex:mac,win10,win8,win7,linux,etc...)
win10
問題類別:(ex:ML,SVM,RL,DL,RNN,CNN,NLP,BD,Vis,etc...)
CNN
使用工具:(ex:python,Java,C++,tensorflow,keras,MATLAB,etc...)
Python
問題內容:
目前的研究是要辨認時頻圖
目標是要分類出兩種類別
現在選擇使用的架構是EfficientNet B3
搭配transfer learning做訓練
時頻圖輸入時有做標準化
訓練資料有28000
Train跟Validation的比例為0.8、0.2
在fit的過程train很快就收斂了
在Validation的部分完全沒辦法收斂
所以合理懷疑時overfitting
目前想不到合適的解決辦法
雖然最後測試的準確度有86%
但是感覺完全是矇到的
想請問板上的前輩有什麼建議?
https://i.imgur.com/i1lRjCv.jpg
https://i.imgur.com/ZPaYBx4.jpg
https://i.imgur.com/UrHO7R5.jpg
https://i.imgur.com/BkKPy7Z.jpg
https://i.imgur.com/YI6kNUV.jpg
https://i.imgur.com/8RWVVuw.jpg
https://i.imgur.com/KLoA3MG.jpghttps://
i.imgur.com/A30vu0q.jpg
https://i.imgur.com/QuebHiL.jpg
-----
Sent from JPTT on my iPhone
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.133.251 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/DataScience/M.1666789658.A.ABC.html
1F:→ thefggeuck: 補上accuracy 10/26 21:08
3F:→ thefggeuck: 麻煩各位前輩給我一些指點 10/26 21:38
4F:→ chang1248w: efficient net原本train在哪裡? 10/26 22:00
5F:→ chang1248w: 你原本的toy model有這樣的問題嗎 10/26 22:07
6F:→ chang1248w: 另外testing在什麼樣的集合上做? 10/26 22:09
7F:→ chang1248w: 好奇問個,時頻圖怎麼會有rgb 10/26 22:12
8F:→ thefggeuck: Train是用模擬的方式做試題邊界不反射的訊號 10/26 22:15
9F:→ thefggeuck: ,再加上不反射邊界不反射訊號加上雜訊。 10/26 22:15
10F:→ thefggeuck: Test是用模擬實驗訊號,邊界有反射的訊號。 10/26 22:15
11F:→ thefggeuck: 時頻圖的顏色我是用Matlab處理使用的colormap是用jet 10/26 22:16
12F:→ thefggeuck: 補充一下,原本有使用過vgg16的模型做訓練,但是測試 10/26 22:18
13F:→ thefggeuck: 結果最好的是EfficientNet B3 10/26 22:18
14F:→ chang1248w: 最下面留一層hidden layer就好,然後試試看第一個。 10/26 22:33
15F:→ chang1248w: epoch之後unfreeze整個模型 10/26 22:33
16F:→ thefggeuck: 樓上的前輩指的第一個是什麼意思? 10/26 22:37
17F:→ chang1248w: 第一個epoch 10/26 23:04
18F:→ thefggeuck: 請問能給我更具體的操作說明嗎? 10/27 11:01
19F:→ thefggeuck: 我算是這方面的新手 10/27 11:01
20F:→ thefggeuck: 謝謝 10/27 11:01
21F:→ chang1248w: 我懷疑你的domain和imagenet 差太大,導致模型解出來 10/27 11:39
22F:→ chang1248w: 的特徵多半和預測沒什麼關係,再疊上dropout造成模型 10/27 11:39
23F:→ chang1248w: 在決策時沒有穩定的共識 10/27 11:39
24F:→ chang1248w: 另外dropout不建議和batch normalization 連在一起使 10/27 11:42
25F:→ chang1248w: 用 10/27 11:42
27F:→ chang1248w: 你可以先試試看把dropout拿掉,或者把mlp調整成 10/27 11:45
28F:→ chang1248w: dense-bn-relu+dropout 10/27 11:45
29F:→ chang1248w: 沒幫助再試整個模型上的fine-tuning 10/27 11:47
30F:→ chang1248w: 具體步驟是你現在的方法只train一個epoch,儲存整個 10/27 11:50
31F:→ chang1248w: 模型的參數,把整個模型都設成trainable,再complie 10/27 11:50
32F:→ chang1248w: 模型一次,載入剛剛訓練過一個epoch的參數,繼續trai 10/27 11:50
33F:→ chang1248w: n 10/27 11:50
34F:→ chang1248w: 你可以在.fit之前呼叫. summary 來約略的檢查模型的 10/27 11:52
35F:→ chang1248w: 參數有沒有成功切換至trainable 10/27 11:52
36F:→ chang1248w: 最後,一般在fine-tuning的時候會加上L2 regularizer 10/27 11:55
37F:→ chang1248w: 但是這東西遇上adam之類含有動量項的算法時,行為和 10/27 11:55
38F:→ chang1248w: 理論上應該給予的懲罰有所落差,因此有了adamW和sgdW 10/27 11:55
39F:→ chang1248w: 之類的更正版 10/27 11:55
40F:→ chang1248w: 你可以在tensorflow的擴充包,tensorflow-addons找到 10/27 11:56
41F:→ chang1248w: 它們 10/27 11:56
42F:→ chang1248w: validation抖的這麼厲害已經超出overfitting的範疇了 10/27 12:01
43F:→ chang1248w: 數量級差太多 10/27 12:01
44F:→ thefggeuck: 非常感謝前輩 我先嘗試看看 10/27 12:12
45F:→ chang1248w: 能有幾分作用我是不知道啦lol 10/27 12:36
46F:推 wuyiulin: 朝聖很會抖的 val 10/27 14:10
47F:→ thefggeuck: 這是改成dense-bn-relu-dropout的結果 10/27 17:24
48F:→ thefggeuck: Predict準確率72% 10/27 17:24
51F:→ chang1248w: 這看起來就是平常會看到的overfitting 10/27 19:01
52F:→ thefggeuck: 已經有照著前輩的方式操作了,先把trainable 關掉,訓 10/28 01:37
53F:→ thefggeuck: 練一個epoch,再把模型變成可訓練,接著上一個epoch的 10/28 01:37
54F:→ thefggeuck: 權重繼續訓練,但是出來的結果val 也是亂跳… 10/28 01:37
55F:→ chang1248w: 是像最上面那種潑漆似的灑脫,還是前幾樓這種5%左右 10/28 03:26
56F:→ chang1248w: 的震盪? 10/28 03:26
57F:→ thefggeuck: 像一開始的那種潑漆式 10/28 08:58
58F:→ thefggeuck: 如果不使用遷移式學習,把所有的參數都打開,訓練1000 10/28 08:59
59F:→ thefggeuck: 個epoch看看,效果會不會比較好? 10/28 08:59
60F:→ chang1248w: 我沒想法,這要試了才知道 10/28 12:13
61F:→ chang1248w: 等等,你網路的最後一層怎麼是sigmoid 10/28 12:16
62F:→ chang1248w: sigmoid是給非零即一的binary classification 用的, 10/28 12:20
63F:→ chang1248w: 接在Binary cross entropy (BCE)後面,一般ce的形式 10/28 12:20
64F:→ chang1248w: 要用softmax當輸出 10/28 12:20
65F:→ thefggeuck: 是的,最終需要的答案就是只有兩個,不是0就是1 10/28 13:41
66F:→ chang1248w: 用sigmoid有可能會輸出[1, 1],這是你要的? 10/28 14:44
67F:→ thefggeuck: 我要的答案是0或1 ,二分類 10/28 14:54
68F:→ chang1248w: 那最後一層的activation 就得用softmax 10/28 14:59
69F:→ chang1248w: 不然就只輸出一個用sigmoid的node,然後loss用BCE 10/28 15:00
70F:→ thefggeuck: 那compile要用categorical cross entropy 嗎?如果我 10/28 15:03
71F:→ thefggeuck: 選擇用softmax 的話 10/28 15:03
72F:→ chang1248w: 要 10/28 15:14
73F:→ thefggeuck: 好的,謝謝,我現在嘗試 10/28 15:17
74F:推 j840715: 你的試體很薄嗎 有沒有機會只拿暫態的時間段 不要被回波 11/03 07:57
75F:→ j840715: 干擾呢ˉ? 11/03 07:57
76F:→ chang1248w: 有沒有回波對應該沒什麼差,可以有回波和沒有回波的 11/03 20:42
77F:→ chang1248w: 資料打散在一起,再切訓練/測驗集 11/03 20:42
78F:→ thefggeuck: 剛剛跟教授報告,他覺得是資料量不平均,0的部分9000 11/04 10:54
79F:→ thefggeuck: 筆、1的部分有19000筆,有可能是沒有真正隨機切分出來 11/04 10:54
80F:→ thefggeuck: ,不知道這種原因是有可能的嗎? 11/04 10:54
81F:→ thefggeuck: 試題厚度20公分,我是用有拿波會反射的訊號當data,應 11/04 10:56
82F:→ thefggeuck: 該是不會影響。 11/04 10:56
83F:推 wuyiulin: 資料量不平均的問題用 Focal Loss 的 Alpha vector 11/06 01:54
84F:→ wuyiulin: 處理。 11/06 01:54
85F:→ wuyiulin: 簡單來說就是去修一下 CE 11/06 01:54
86F:→ chang1248w: 怎麼我讀到的focal loss是對樣本難易度做調整 11/06 09:44
87F:→ wuyiulin: 你那個是 gamma , 前面那個 alpha 可以處理 data imba 11/06 14:55
88F:→ wuyiulin: lance 。 11/06 14:55
89F:→ chang1248w: 喔,那個不算focal loss 提出的吧,年初還有一篇後續 11/06 21:52
90F:→ chang1248w: 的polyloss 11/06 21:52
91F:推 j840715: 聽起來好像是暫態的彈性波啊 11/07 09:49
92F:→ j840715: 如果訓練只給他看用有限元素法模擬無邊界的 得到時頻圖就 11/07 09:49
93F:→ j840715: 是沒反射 11/07 09:49
94F:→ j840715: 測試的資料集如果都是有反射影響 那疊合就會因為距離邊 11/07 09:49
95F:→ j840715: 界不同而不同 所以時間域特徵會直接變成雜訊 11/07 09:49
96F:→ j840715: 雜訊還要考慮是否在資料集中的期望值是0 11/07 09:49
97F:→ j840715: 如果硬要說有沒有反射會一樣 那不如就用fft 不用時頻圖了 11/07 09:49
98F:推 j840715: 所以感覺可以從切資料集品均一點這點著手 跟樓上大大說 11/07 09:57
99F:→ j840715: 的一樣 打散處理 11/07 09:57
100F:→ thefggeuck: 我已經有把訓練資料打散了,但是還沒有解決問題。我想 11/10 12:52
101F:→ thefggeuck: 是訓練資料不平均造成的。 11/10 12:52