2018 12 04 交叉驗證,val

2021-09-02 14:26:13 字數 1245 閱讀 1167

問題:

caffe 製作乙個專案的資料集是不是應該分成三分:train、val、test。訓練模型的時候train_val.prorotxt中train部分的檔案路徑是train集的,test部分的路徑是val集的。而模型調參完畢訓練完後想測試一下準確率,此時train_val.prorotxt中test部分的檔案路徑應該換成test集的。這樣理解對麼?為什麼網上很多教程都只製作了train和test的,把val的忽略了呢?沒有val怎麼得到好的模型啊?

答案:

你要知道val是validation的簡稱。

training dataset是網路模型在訓練的時候用的,而validation dataset是網路模型在訓練過程中測試用的,val是不影響訓練的。

training dataset和 validation dataset都是在訓練的時候起作用。

而因為validation的資料集和training沒有交集,所以validation這部分資料對最終訓練出的模型沒有貢獻。

validation的主要作用是來驗證是否過擬合、以及用來調節訓練引數等。

比如你訓練0-10000次迭代過程中,train和validation的loss都是不斷降低

但是從10000-20000過程中train loss不斷降低, validation的loss不降反公升。

那麼就證明繼續訓練下去,模型只是對training dataset這部分擬合的特別好,但是泛化能力很差。

所以與其選取20000次的結果,不如選擇10000次的結果。

這個過程的名字叫做 early stop, validation資料在此過程中必不可少。

總結:在訓練的時候可以得到train和val這兩個資料集的誤差率。val是在訓練過程中用於測試(但不影響訓練),test是訓練完成之後用於測試。

如果你去跑caffe自帶的訓練demo,你會用到train_val.prototxt,這裡面的val其實就是validation。

而網路輸入的test層,其實就是validation,而不是test。你可以通過觀察validation的loss和train的loss定下你需要的模型。

但是為什麼現在很多人都不用validation了呢?

我的理解是現在模型中防止過擬合的機制已經比較完善了,dropout\bn等做的很好了。

而且很多時候大家都用原來的模型進行fine tune,也比從頭開始更難過擬合。

所以大家一般都定乙個訓練迭代次數,直接取最後的模型來測試。

scikit learning 交叉驗證

import numpy as np from sklearn import datasets from sklearn.cross validation import train test split from sklearn.neighbors import kneighborsclassifi...

交叉驗證(cross validation)

交叉驗證是資料分析時模型選擇的方法之一,將資料集分為三份,分別為訓練集 training set 驗證集 valication set 和測試集 test set 分別功能為訓練模型,選擇模型和對學習方法的評估。其演算法的思想為重複的使用資料,使得模型的精度越來越高。交叉驗證的方法有以下三種 1.簡...

交叉驗證(Cross validation

交叉驗證 cross validation 交叉驗證用於防止模型過於複雜而引起的過擬合 作用 如何交叉驗證 我這裡主要介紹k交叉驗證 1 將資料集分成k份 2 對於每乙個模型 拿多項式回歸舉例,m 2為乙個模型,m 3為乙個模型。我們主要就是尋找最好的m for j 1,2,k 將除第j份的所有資料...