作者clothg34569 (提拉)
看板graduate
標題Re: [討論] 跑實驗數據要跑多次取平均嗎
時間Mon Sep 19 21:08:12 2022
路過看到這篇 自己剛好有參與過幾篇ML相關PAPER 來隨手回一下
想到啥就打啥可能有點亂 另外有錯也麻煩推文講一下我再修改
以下只講正規作法 先不討論一些偷雞做法
首先 實驗的目的就是為了證明自己的架構/做法比別人更好
那實驗重點就是要用嚴謹的方式來證明這一點
以下先把資料來源分成三種
1. 公開Dataset
2. 自己產生Dataset (假資料)
3. 自己收集的Dataset (真實資料)
然後看文中似乎沒有很熟所以這邊稍微講一次
Training Dataset : 丟下去訓練的Dataset
Validation Dataset : 訓練"時"驗證的Dataset
Testing Dataset : 訓練"完"驗證Model成效的Dataset
其中Train Val選擇上都比較自由
而Testing則是要固定 才能在不同Model間有統一比較標準
再來"通常"來說 Train Val Testing 應該彼此獨立
不該有重疊資料
但某些做法Train Val可以在特殊情況下重疊 例如要觀察某個Data是否無法學習之類的
而Test則是完全不該重疊
Test有重疊基本上就等於作弊了
----
以下討論不同種類資料來源時的分割法
1:
如果是1的話 那就比較簡單了
Training Validation 使用公開Dataset中Trainning data
數量比例任意
而Testing則是跑完公開Dataset中"所有" Testing data
結果一般而言是選自己Train出來Model中最好的那個
2:
由於是自己產生的假資料
所以可以先假設資料本身算是均勻的
再來因為是自己產生 所以數量理論上可以看自己心情要加多少就多少
那這時候通常是Train Val任意
Test則是參考相關Paper中 他們最後Testset使用的Data數量 再自己稍微加多一點
例如別人通常用2000~4000張來Test的話 自己可以抓個4000張~5000張之類的
選好之後Testing應該要固定
*注意A
由於是自己產的Data 所以跟別人做比較時 會有Model使用不同Data Train所造成的差異
如果要證明自己架構比較好 那應該要將別人的Model使用自己的Data Train過之後
再跑同一組Test data做比較
3:
自己收集的真資料
這時候可以假設資料是真實性高 並且不均勻的
如果想要驗證自己Model不會因為Data本身的Bias而造成結果差異過大
可以跑推文中所提到的K-Fold 來證明
選擇Testing的部分 由於你資料是不均勻的
所以選擇通常來說
是均勻選擇資料本身的分布
例如以人的年齡來說 可能以5歲唯一級距
然後從0~80歲分成16個Group
每1個Group中隨機選擇n張 以保證最後Testdata的年齡分布是平均的
選擇完Test data之後 一樣Train Val自己任意分
Test data數量可以參考相關Paper中Real world Data的數量
以及自己收集難度去估計
例如別人Test Real World 300張 自己只收集了600張 那可能就拿其中200張當Test
另外 驗證別人Model時同樣需要注意前面的注意A
最後 通常來說
Train : Val 大約都是8:2
Test越多越好 實務上通常是參考別人的數量自己做差不多數字
---
Model選擇上
標準做法是選擇自己Validation最好的去跑Test
實際發Paper做法通常是把所有Model都拿去跑Test然後選最好的那組當結果...
至於時間上就自己看能負擔到哪吧
更偷雞的做法就不提了
多看多跑多比較 就知道....
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.64.172 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/graduate/M.1663592894.A.8D0.html
1F:推 qazStarStar: 推 09/19 21:37
2F:推 whatzup1124: 推 09/19 22:25
3F:推 zxp9505007: 寫的很好 建議學生不要偷雞 務實嚴謹 現在抓抄襲 難保 09/20 00:38
4F:→ zxp9505007: 以後不會抓無法重現 09/20 00:38
5F:推 devilkool: 推 09/20 02:07
6F:推 as81349507: 所以存下每個epoch看testing最好是可以的嗎? 09/20 02:24
7F:→ zxp9505007: 回樓上 可以 但更嚴謹的做法是 存最好的Val去測test 09/20 03:10
8F:→ zxp9505007: 當作結果 09/20 03:10
9F:→ zxp9505007: 或是結合kflod還有你的作法也可以 09/20 03:12
10F:推 wyatt0819: 推 09/20 04:24
11F:推 Qooriver570: 所以跑100個epoch,假設在第80個epoch 的Val accurac 09/20 08:22
12F:→ Qooriver570: y是最高的,就把那次的model 跑Test嗎? 那假設發現t 09/20 08:22
13F:→ Qooriver570: est accuracy比Val爛很多怎麼辦? 09/20 08:22
14F:推 pk790127: 推 09/20 09:58
15F:推 ChengFu: 推 09/20 10:13
16F:→ harryron9: 回樓上上上 這就是你要去研究的問題(老闆調 09/20 10:16
17F:推 akira30: 推 09/20 10:50
18F:推 paul51110: 16F 真的XD 09/20 11:15
19F:推 NTUmaki: 頂會也一堆沒辦法reproduce 的source code,老實說他聲稱 09/21 03:38
20F:→ NTUmaki: 有做什麼實驗設置的也無從驗證 09/21 03:39
21F:推 tommytyc: 確實,樓上說到重點= = 09/21 15:53
22F:推 Chang870829: 推 09/21 16:24
23F:→ chang1248w: test的結果輸valid太多最大的可能就是valid洩漏進 09/21 19:30
24F:→ chang1248w: training data 09/21 19:30
25F:→ chang1248w: cross validation 算最可靠的指標了 09/21 19:31
26F:推 zqAI3yGOAT: 推 09/22 00:47
27F:推 shuo19971203: 同意樓上上 基本上交叉驗證的話就 09/22 12:09
28F:→ shuo19971203: 很有參考性了 09/22 12:09
29F:推 tenpoinyuki: 推 09/29 20:03