train是訓練集,val是訓練過程中的測試集,是爲了讓你在邊訓練邊看到訓練的結果,及時判斷學習狀態。test就是訓練模型結束後,用於評價模型結果的測試集。只有train就可以訓練,val不是必須的,比例也可以設置很小。test對於model訓練也不是必須的,但是一般都要預留一些用來檢測,通常推薦比例是8:1:1
val
是validation
的簡稱。training dataset
和validation dataset
都是在訓練的時候起作用。
而因爲validation
的數據集和training
沒有交集,所以這部分數據對最終訓練出的模型沒有貢獻。validation
的主要作用是來驗證是否過擬合、以及用來調節訓練參數等。
比如訓練0-10000
次迭代過程中,train
和validation
的loss
都是不斷降低,
但是從10000-20000
過程中train loss
不斷降低,validation
的loss
不降反升。
那麼就證明繼續訓練下去,模型只是對training dataset
這部分擬合的特別好,但是泛化能力很差。
所以與其選取20000
次的結果,不如選擇10000
次的結果。
這個過程的名字叫做Early Stop
,validation
數據在此過程中必不可少。
如果跑caffe
自帶的訓練demo
,你會用到train_val.prototxt
,這裏面的val
其實就是validation
。
而網絡輸入的TEST
層,其實就是validation
,而不是test
。你可以通過觀察validation
的loss
和train
的loss
定下你需要的模型。
但是爲什麼現在很多人都不用validation
了呢?
我的理解是現在模型中防止過擬合的機制已經比較完善了,Dropout\BN
等做的很好了。
而且很多時候大家都用原來的模型進行fine tune
,也比從頭開始更難過擬合。
所以大家一般都定一個訓練迭代次數,直接取最後的模型來測試。