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

看板graduate作者 (提拉)時間1年前 (2022/09/19 21:08), 編輯推噓16(16012)
留言28則, 18人參與, 1年前最新討論串2/2 (看更多)
路過看到這篇 自己剛好有參與過幾篇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://www.ptt.cc/bbs/graduate/M.1663592894.A.8D0.html

09/19 21:37, 1年前 , 1F
09/19 21:37, 1F

09/19 22:25, 1年前 , 2F
09/19 22:25, 2F

09/20 00:38, 1年前 , 3F
寫的很好 建議學生不要偷雞 務實嚴謹 現在抓抄襲 難保
09/20 00:38, 3F

09/20 00:38, 1年前 , 4F
以後不會抓無法重現
09/20 00:38, 4F

09/20 02:07, 1年前 , 5F
09/20 02:07, 5F

09/20 02:24, 1年前 , 6F
所以存下每個epoch看testing最好是可以的嗎?
09/20 02:24, 6F

09/20 03:10, 1年前 , 7F
回樓上 可以 但更嚴謹的做法是 存最好的Val去測test
09/20 03:10, 7F

09/20 03:10, 1年前 , 8F
當作結果
09/20 03:10, 8F

09/20 03:12, 1年前 , 9F
或是結合kflod還有你的作法也可以
09/20 03:12, 9F

09/20 04:24, 1年前 , 10F
09/20 04:24, 10F

09/20 08:22, 1年前 , 11F
所以跑100個epoch,假設在第80個epoch 的Val accurac
09/20 08:22, 11F

09/20 08:22, 1年前 , 12F
y是最高的,就把那次的model 跑Test嗎? 那假設發現t
09/20 08:22, 12F

09/20 08:22, 1年前 , 13F
est accuracy比Val爛很多怎麼辦?
09/20 08:22, 13F

09/20 09:58, 1年前 , 14F
09/20 09:58, 14F

09/20 10:13, 1年前 , 15F
09/20 10:13, 15F

09/20 10:16, 1年前 , 16F
回樓上上上 這就是你要去研究的問題(老闆調
09/20 10:16, 16F

09/20 10:50, 1年前 , 17F
09/20 10:50, 17F

09/20 11:15, 1年前 , 18F
16F 真的XD
09/20 11:15, 18F

09/21 03:38, 1年前 , 19F
頂會也一堆沒辦法reproduce 的source code,老實說他聲稱
09/21 03:38, 19F

09/21 03:39, 1年前 , 20F
有做什麼實驗設置的也無從驗證
09/21 03:39, 20F

09/21 15:53, 1年前 , 21F
確實,樓上說到重點= =
09/21 15:53, 21F

09/21 16:24, 1年前 , 22F
09/21 16:24, 22F

09/21 19:30, 1年前 , 23F
test的結果輸valid太多最大的可能就是valid洩漏進
09/21 19:30, 23F

09/21 19:30, 1年前 , 24F
training data
09/21 19:30, 24F

09/21 19:31, 1年前 , 25F
cross validation 算最可靠的指標了
09/21 19:31, 25F

09/22 00:47, 1年前 , 26F
09/22 00:47, 26F

09/22 12:09, 1年前 , 27F
同意樓上上 基本上交叉驗證的話就
09/22 12:09, 27F

09/22 12:09, 1年前 , 28F
很有參考性了
09/22 12:09, 28F
文章代碼(AID): #1ZA6c-ZG (graduate)
文章代碼(AID): #1ZA6c-ZG (graduate)