是看訓練出的最高準確率嗎?這樣要運行程序多少次纔行?


跟樓上有些同學的觀點有一點點差異,這個問題要具體情況具體分析。如果你的文章是試圖說明你的某個網路結構,優化步驟的改變帶來進步,那你應該要多次試驗,同時標定上下浮動的區間,最好的結果也應該寫上去。如果你的工作更傾向於特徵提取 特徵構造,或者是提供了一些數據集等等地方,就選個best result應該問題不大,如果數據集較小,能提供十折交叉驗證驗證的結果也挺好的呀。


如果網路結構相同,使用下面的設置可以固定隨機種子,方便對比結果。但如果網路結構有變化,哪怕多一個變數,一個類成員值,隨機值會隨著模型整體發生變化。

#下面使得每次的結果是固定的

init_seed = 34

torch.manual_seed(init_seed)

torch.cuda.manual_seed(init_seed)

torch.cuda.manual_seed_all(init_seed)

np.random.seed(init_seed) # 用於numpy的隨機數

torch.backends.cudnn.benchmark = False

torch.backends.cudnn.deterministic = True


最正規的做法: 平均值 [公式] 標準差

一般講武德的做法:平均值

不講武德的做法:最大值


不是訓練集太小,就是batch_size開太小了


GPU裡面的cudnn有些不能控制的隨機數,用CPU就可以設定隨機種子,得到完全一樣的結果。


假設題主說的結果是測試集結果

標準做法是多次取平均值和標準差 例如隨機初始化訓練5次 10次 或更多 然後在論文中也要report平均值±標準差

不過現在很多深度學習論文都只report最大值 就很不講武德


計算置信區間


要是訓練都一樣那纔是不正常


建議採用交叉驗證方法,將樣本隨機分成10份,每次任取9份進行訓練,1份進行測試,取誤差的平均值作為實驗結果。


最討厭那些只彙報最好結果的,有的甚至恬不知恥放出代碼

換一兩個seed,結果下降7個點的也見過,就只彙報最好結果我也是服了。

最可恨的是後面寫論文,引用他的不行,因為他只彙報了最好的,超不過;不引用他的也不行,審稿人會問為什麼不和他比;復現他的結果還是不行,結果達不到,差了5個點,審稿人直接質疑沒認真復現

這人要是站我面前,我突突了他


推薦閱讀:
相關文章