1. 程式人生 > 其它 >測試集精度大於訓練精度

測試集精度大於訓練精度

https://www.zhihu.com/question/64003151

本文參考自:https://stackoverflow.com/questions/43979449/higher-validation-accuracy-than-training-accurracy-using-tensorflow-and-keras

      https://www.quora.com/How-can-I-explain-the-fact-that-test-accuracy-is-much-higher-than-train-accuracy

            

如上圖所示,有時候我們做訓練的時候,會得到測試集的準確率或者驗證集的準確率高於訓練集的準確率,這是什麼原因造成的呢?經過查閱資料,有以下幾點原因,僅作參考,不對的地方,請大家指正。

(1)資料集太小的話,如果資料集切分的不均勻,或者說訓練集和測試集的分佈不均勻,如果模型能夠正確捕捉到資料內部的分佈模式話,這可能造成訓練集的內部方差大於驗證集,會造成訓練集的誤差更大。這時你要重新切分資料集或者擴充資料集,使其分佈一樣

(2)由Dropout造成,它能基本上確保您的測試準確性最好,優於您的訓練準確性。Dropout迫使你的神經網路成為一個非常大的弱分類器集合,這就意味著,一個單獨的分類器沒有太高的分類準確性,只有當你把他們串在一起的時候他們才會變得更強大。

  因為在訓練期間,Dropout將這些分類器的隨機集合切掉,因此,訓練準確率將受到影響

  在測試期間,Dropout將自動關閉,並允許使用神經網路中的所有弱分類器,因此,測試精度提高。

訓練集的資料做了一系列的增廣,如旋轉,仿射,模糊,新增噪點等操作;過多的增廣使得訓練集分佈產生了變化。
模型正則化過多,比如訓練時dropout過多,和驗證時的模型相差較大,驗證時是不會有dropout的。
訓練的精度是每個batch產生的,而驗證的精度一般是一個epoch後產生的,驗證時的模型是訓練一個個batch之後的,有一個的滯後性;可以說訓練得差不多的模型用來驗證,當然精度要高一點。
————————————————
版權宣告:本文為CSDN博主「yubajin」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/m0_37223909/article/details/105980930

所以,總的來說,訓練集和測試集不是取自同一資料分佈,測試集樣本較少,模型比較簡單,就有可能出現測試集誤差反而低於訓練集的現象。

相應的解決方案就是,儘量從同一資料集劃分訓練集和測試集,保證測試集樣本充足(比如增加資料)。不太建議單純因為訓練集誤差高於測試集誤差就換用複雜模型,這麼做可能淪為強行過擬合、治標不治本。