Keras中的validation data并不用于更新權(quán)重

2018年07月21日更新

最近在看keras作者寫的Deep Learning with Python莉擒,其中說到了如何使用validation data的問題立莉。這里我總結(jié)一下椎扬。

every time you use feedback from your validation process to tune your model, you leak information about the validation process into the model. Repeated just a few times, this is innocuous; but done systematically over many iterations, it will eventually cause your model to overfit to the validation process (even though no model is directly trained on any of the validation data). This makes the evaluation process less reliable.

首先Keras的fit函數(shù)中,傳入的validation data并不用于更新權(quán)重寞秃,只是用是來檢測loss和accuracy等指標(biāo)的适刀。但是穷蛹!作者說了土陪,即使模型沒有直接在validation data上訓(xùn)練,這也會導(dǎo)致信息泄露肴熏,模型會對validation data逐漸熟悉鬼雀。所以這里我簡單總結(jié)一下比較方便的data split方法。

  1. 用sklearn的train_test_split來把數(shù)據(jù)分割為training data和test data.
  2. 用keras的模型fit時蛙吏,不要使用validation_data這個參數(shù)(因為我們也沒有準(zhǔn)備validatoin data)取刃,而是直接使用validation_split這個參數(shù)蹋肮,把training data中的一部分用來作為validation data就行了。
  3. 上面兩步的目的是用來調(diào)參的璧疗,必須在validation data上進行驗證坯辩,輸出loss。
  4. 調(diào)參:更改layer崩侠,unit漆魔,加dropout,使用L2正則化却音,添加新feature等等
  5. 等調(diào)參結(jié)束后改抡,拿著我們滿意的參數(shù),再一次在整個training data上進行訓(xùn)練系瓢,這一次就不用validation_split了阿纤。因為我們已經(jīng)調(diào)好了參數(shù),不需要觀察輸出的loss夷陋。
  6. 訓(xùn)練完之后欠拾,用model.evaluate()在test data上進行預(yù)測。

2017年07月07日

上一周把一篇論文重新用keras實現(xiàn)了一遍骗绕,源代碼是用java寫的藐窄。

結(jié)果竟然發(fā)現(xiàn)得分比原文高出了4個百分點的。我猜測可能是keras里再fit函數(shù)中設(shè)置的validation data被用于梯度下降酬土,即更新權(quán)重上了荆忍。

于是為了確認自己想法開始找相關(guān)資料,終于在一個issue下找到了解答撤缴。

先說答案吧刹枉,fit 函數(shù)中的validation data并不用于更新權(quán)重
想看討論過程的可以戳這里屈呕,Test data being used for validation data

解釋

@KeironO take a close look at what @neggert said : "The validation set is checked during training to monitor progress, and possibly for early stopping, but is never used for gradient descent."

Indeed, the data set fed to the argument "validation_data" of model.fit() in Keras is never used for training. Using test data for this validation is SAFE.

fit函數(shù)中不論是設(shè)置了validation_split還是validation_data微宝,這部分用于validation的數(shù)據(jù)并不會被用來調(diào)整參數(shù),不會被用于更新權(quán)重凉袱。


回顧

說實話以前用sklearn很多,一直沒有怎么重視這個問題侦铜,validation dataset究竟有沒有用來提高模型的效果专甩。可見還是自己在某些概念上沒有搞清楚钉稍。

比如說這個What is the difference between validation set and test set?討論帖里涤躲,大家都說Validation set is used for tuning the parameters of a model。

而在這個whats is the difference between train, validation and test set, in neural networks?回答里贡未,You're not adjusting the weights of the network with validation data set.

我更同意后者的意見种樱。這里總結(jié)一下蒙袍,不論是哪一個NN模型,validation data都應(yīng)該只用來檢測training時的效果嫩挤,而不應(yīng)該被用于更新權(quán)重上害幅。不然的話觀測到的效果就不真實了,就像是拿test data來做training一樣岂昭,會過擬合以现。

Validation set is mostly used to look out for overfitting on the train dataset during training.
對于validation data來說,主要就是為了防止過擬合约啊。比如說在訓(xùn)練過程中邑遏,查看模型在validation data上的accuracy,如果訓(xùn)練了10輪恰矩,發(fā)現(xiàn)accuracy都沒提高记盒,我們就可以及時停止訓(xùn)練,這個技巧被稱為early stopping外傅,可以防止模型過度訓(xùn)練纪吮。

總結(jié)

有些概念在新手階段很容易被混淆,這個時候就應(yīng)該多看看Stack Overflow或github issue里找找相關(guān)討論(撕逼)帖栏豺,看看那些contributor如何解釋彬碱。Test data being used for validation data應(yīng)該是我看過的撕逼最兇的一個帖子了,不過大家都是就事論事奥洼,這種氛圍特別好巷疼。我等吃瓜群眾在看熱鬧的同時還能學(xué)到知識,真是賺到了:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灵奖,一起剝皮案震驚了整個濱河市嚼沿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓷患,老刑警劉巖骡尽,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擅编,居然都是意外死亡攀细,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門爱态,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谭贪,“玉大人,你說我怎么就攤上這事锦担〖笫叮” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵洞渔,是天一觀的道長套媚。 經(jīng)常有香客問我缚态,道長,這世上最難降的妖魔是什么堤瘤? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任玫芦,我火速辦了婚禮,結(jié)果婚禮上宙橱,老公的妹妹穿的比我還像新娘姨俩。我一直安慰自己,他們只是感情好师郑,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布环葵。 她就那樣靜靜地躺著,像睡著了一般宝冕。 火紅的嫁衣襯著肌膚如雪张遭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天地梨,我揣著相機與錄音菊卷,去河邊找鬼。 笑死宝剖,一個胖子當(dāng)著我的面吹牛洁闰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播万细,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼扑眉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赖钞?” 一聲冷哼從身側(cè)響起腰素,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雪营,沒想到半個月后弓千,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡献起,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年洋访,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谴餐。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡姻政,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出总寒,到底是詐尸還是另有隱情扶歪,我是刑警寧澤理肺,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布摄闸,位于F島的核電站善镰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏年枕。R本人自食惡果不足惜炫欺,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熏兄。 院中可真熱鬧品洛,春花似錦、人聲如沸摩桶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硝清。三九已至辅斟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芦拿,已是汗流浹背士飒。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔗崎,地道東北人酵幕。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像缓苛,于是被迫代替她去往敵國和親芳撒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容