訓練集 驗證集 測試集的作用和區別

2021-10-19 15:20:47 字數 2317 閱讀 2524

簡單說,訓練集就是用來訓練模型用的,驗證集為了驗證模型的效果, 測試集用來最終評測。所以基於這個,那訓練資料的時候,就不要使用驗證集和測試集的相關資訊,包括統計均值方差特徵等, 但是驗證集可以在模型訓練過程中進行模型調參,就是手動調一些外部引數,像是epoch、learning rate、 dropout prob等。

詳細介紹下,參考:

訓練集(train set)—— 用於模型擬合的資料樣本。在訓練過程中對訓練誤差進行梯度下降,進行學習,可訓練的權重引數。

驗證集(validation set)—— 是模型訓練過程中單獨留出的樣本集,它可以用於調整模型的超引數和用於對模型的能力進行初步評估。

驗證集可以用在訓練的過程中,一般在訓練時,幾個epoch結束後跑一次驗證集看看效果。(驗證得太頻繁會影響訓練速度)這樣做的第乙個好處是,可以及時發現模型或者引數的問題,比如模型在驗證集上發散啦、出現很奇怪的結果啦(如無窮大)、map不增長或者增長很慢啦等等情況,這時可以及時終止訓練,重新調參或者調整模型,而不需要等到訓練結束。另外乙個好處是驗證模型的泛化能力,如果在驗證集上的效果比訓練集上差很多,就該考慮模型是否過擬合了。同時,還可以通過驗證集對比不同的模型。在一般的神經網路中, 我們用驗證資料集去尋找最優的網路深度(number of hidden layers),或者決定反向傳播演算法的停止點或者在神經網路中選擇隱藏層神經元的數量;

由於驗證集是用來」訓練」超引數的,儘管驗證集的誤差通常會比訓練集誤差小,一般來說驗證集比較小會低估泛化誤差。所有超引數優化完成之後,泛化誤差可能會通過測試集來估計。   

在普通的機器學習中常用的交叉驗證(cross validation) 就是把訓練資料集本身再細分成不同的驗證資料集去訓練模型。

測試集—— 用來評估模最終模型的泛化能力。但不能作為調參、選擇特徵等演算法相關的選擇的依據。

1)驗證集是一定需要的; 

1)針對超參的選擇我們是根據驗證集上的效果來進行調整的,因此驗證集可以看做參與到「人工調參」的訓練過程; 

2)注意訓練集、驗證集和測試集應該服從同一資料分布,這樣我們才能進行玄學調參; 

3)測試集的存在只是為了驗證我們在訓練集和驗證集(通常驗證集只是非訓練集乙個小子集)上進行模型的超參和引數訓練後,驗證我們得到的模型是否具有泛化效能,再做一次確認。如果驗證集具有足夠泛化代表性,測試集是可以沒有的,但驗證集是必須有的。

驗證集的作用:

在每一步訓練之後,計算validation_data的分類精度。一旦validation_data的分類精度達到飽和,就停止訓練。這種策略叫做提前終止(early stopping)。為什麼要用validation_data而不是test_data來防止過擬合呢?通過validation_data來選擇不同的超引數(例如,訓練步數、學習率、最佳網路結構、等等)是乙個普遍的策略。我們通過這樣的評估來計算和設定合適的超引數值。

當然,上面的解釋不能回答為什麼我用validation_data而不是test_data來防止過擬合。如果基於test_data的評估結果設定超引數,有可能我們的網路最後是對test_data過擬合。也就是說,我們或許只是找到了適合test_data具體特徵的超引數,網路的效能不能推廣到其它的資料集。通過validation_data來設定超引數能夠避免這種情況的發生。然後,一旦我們得到了想要的超引數,就用test_data 做最後的精度評估。這讓我們相信test_data的精度能夠真正提現網路的泛化能力。換句話說,你能把validation_data視為幫助我們學習合適超引數的一種訓練資料。由於validation_datatest_data` 是完全分離開的,所以這種找到優秀超引數的方法被稱為分離法(hold out method)

for epoch in range(flags.num_train_epochs):

for step, batch in tqdm(enumerate(batches)):

train_step(x_batch, y_batch)

f1_micro, f1_macro, acc, loss = valid(x_valid, y_valid)

訓練集 驗證集 測試集的作用

在機器學習或者深度學習中,我們需要了解我們的模型包括什麼 1 模型設計 模型架構 包括模型有多少層,每層有多少個神經元 可訓練權重引數 模型內建引數 2 模型訓練的引數 模型外接引數,如學習率 優化策略等等 訓練集 train set 用於模型擬合的資料樣本。在訓練過程中對訓練誤差進行梯度下降,進行...

訓練集 驗證集 測試集的區別

深度學習模型的引數分為普通引數和超引數 普通引數 在模型訓練的過程中可以被梯度下降所更新的,也就是訓練集所更新的引數。超引數 比如網路層數 網路節點數 迭代次數 學習率等等,這些引數不在梯度下降的更新範圍內。超引數的設定一般是人工根據驗證集來調。訓練集的作用就是通過梯度下降來調整模型的內部普通引數。...

訓練集 驗證集和測試集

訓練集 驗證集和測試集這三個名詞在機器學習領域極其常見,但很多人並不是特別清楚,尤其是後兩個經常被人混用。在有監督 supervise 的機器學習中,資料集常被分成2 3個,即 訓練集 train set 驗證集 validation set 測試集 test set ripley,b.d 1996...