PTT推薦

Re: [討論] 跑實驗數據要跑多次取平均嗎

看板graduate標題Re: [討論] 跑實驗數據要跑多次取平均嗎作者
clothg34569
(提拉)
時間推噓17 推:17 噓:0 →:12

路過看到這篇 自己剛好有參與過幾篇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留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.64.172 (臺灣)
PTT 網址

qazStarStar09/19 21:37

whatzup112409/19 22:25

zxp950500709/20 00:38寫的很好 建議學生不要偷雞 務實嚴謹 現在抓抄襲 難保

zxp950500709/20 00:38以後不會抓無法重現

devilkool09/20 02:07

as8134950709/20 02:24所以存下每個epoch看testing最好是可以的嗎?

zxp950500709/20 03:10回樓上 可以 但更嚴謹的做法是 存最好的Val去測test

zxp950500709/20 03:10當作結果

zxp950500709/20 03:12或是結合kflod還有你的作法也可以

wyatt081909/20 04:24

Qooriver57009/20 08:22所以跑100個epoch,假設在第80個epoch 的Val accurac

Qooriver57009/20 08:22y是最高的,就把那次的model 跑Test嗎? 那假設發現t

Qooriver57009/20 08:22est accuracy比Val爛很多怎麼辦?

pk79012709/20 09:58

ChengFu09/20 10:13

harryron909/20 10:16回樓上上上 這就是你要去研究的問題(老闆調

akira3009/20 10:50

paul5111009/20 11:1516F 真的XD

NTUmaki09/21 03:38頂會也一堆沒辦法reproduce 的source code,老實說他聲稱

NTUmaki09/21 03:39有做什麼實驗設置的也無從驗證

tommytyc09/21 15:53確實,樓上說到重點= =

Chang87082909/21 16:24

chang1248w09/21 19:30test的結果輸valid太多最大的可能就是valid洩漏進

chang1248w09/21 19:30training data

chang1248w09/21 19:31cross validation 算最可靠的指標了

zqAI3yGOAT09/22 00:47

shuo1997120309/22 12:09同意樓上上 基本上交叉驗證的話就

shuo1997120309/22 12:09很有參考性了

tenpoinyuki09/29 20:03