https://www.zhihu.com/question/64003151
如上圖所示,有時候我們做訓練的時候,會得到測試集的准確率或者驗證集的准確率高於訓練集的准確率,這是什么原因造成的呢?經過查閱資料,有以下幾點原因,僅作參考,不對的地方,請大家指正。
(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
所以,總的來說,訓練集和測試集不是取自同一數據分布,測試集樣本較少,模型比較簡單,就有可能出現測試集誤差反而低於訓練集的現象。
相應的解決方案就是,盡量從同一數據集划分訓練集和測試集,保證測試集樣本充足(比如增加數據)。不太建議單純因為訓練集誤差高於測試集誤差就換用復雜模型,這么做可能淪為強行過擬合、治標不治本。