淺談Keras中shuffle和validation_split的順序
模型的fit函數(shù)有兩個(gè)參數(shù),shuffle用于將數(shù)據(jù)打亂,validation_split用于在沒(méi)有提供驗(yàn)證集的時(shí)候,按一定比例從訓(xùn)練集中取出一部分作為驗(yàn)證集
這里有個(gè)陷阱是,程序是先執(zhí)行validation_split,再執(zhí)行shuffle的,所以會(huì)出現(xiàn)這種情況:
假如你的訓(xùn)練集是有序的,比方說(shuō)正樣本在前負(fù)樣本在后,又設(shè)置了validation_split,那么你的驗(yàn)證集中很可能將全部是負(fù)樣本
同樣的,這個(gè)東西不會(huì)有任何錯(cuò)誤報(bào)出來(lái),因?yàn)镵eras不可能知道你的數(shù)據(jù)有沒(méi)有經(jīng)過(guò)shuffle,保險(xiǎn)起見如果你的數(shù)據(jù)是沒(méi)shuffle過(guò)的,最好手動(dòng)shuffle一下
補(bǔ)充知識(shí):Keras使用陷阱
1 TF卷積核與TH卷積核
Keras提供了兩套后端,Theano和Tensorflow。如果你從無(wú)到有搭建自己的一套網(wǎng)絡(luò),則大可放心。但如果你想使用一個(gè)已有網(wǎng)絡(luò),或把一個(gè)用th/tf 訓(xùn)練的網(wǎng)絡(luò)以另一種后端應(yīng)用,在載入的時(shí)候你就應(yīng)該特別小心了。
卷積核與所使用的后端不匹配,不會(huì)報(bào)任何錯(cuò)誤,因?yàn)樗鼈兊膕hape是完全一致的,沒(méi)有方法能夠檢測(cè)出這種錯(cuò)誤。
在使用預(yù)訓(xùn)練模型時(shí),一個(gè)建議是首先找一些測(cè)試樣本,看看模型的表現(xiàn)是否與預(yù)計(jì)的一致。
如需對(duì)卷積核進(jìn)行轉(zhuǎn)換,可以使用utils.convert_all_kernels_in_model對(duì)模型的所有卷積核進(jìn)行轉(zhuǎn)換
2 向BN層中載入權(quán)重
如果你不知道從哪里淘來(lái)一個(gè)預(yù)訓(xùn)練好的BN層,想把它的權(quán)重載入到Keras中,要小心參數(shù)的載入順序。
一個(gè)典型的例子是,將caffe的BN層參數(shù)載入Keras中,caffe的BN由兩部分構(gòu)成,bn層的參數(shù)是mean,std,scale層的參數(shù)是gamma,beta。
按照BN的文章順序,似乎載入Keras BN層的參數(shù)應(yīng)該是[mean, std, gamma, beta];
然而不是的,Keras的BN層參數(shù)順序應(yīng)該是[gamma, beta, mean, std],這是因?yàn)間amma和beta是可訓(xùn)練的參數(shù),而mean和std不是。Keras的可訓(xùn)練參數(shù)在前,不可訓(xùn)練參數(shù)在后
錯(cuò)誤的權(quán)重順序不會(huì)引起任何報(bào)錯(cuò),因?yàn)樗鼈兊膕hape完全相同
3 shuffle和validation_split的順序
模型的fit函數(shù)有兩個(gè)參數(shù),shuffle用于將數(shù)據(jù)打亂,validation_split用于在沒(méi)有提供驗(yàn)證集的時(shí)候,按一定比例從訓(xùn)練集中取出一部分作為驗(yàn)證集.
這里有個(gè)陷阱是,程序是先執(zhí)行validation_split,再執(zhí)行shuffle的,所以會(huì)出現(xiàn)這種情況:
假如你的訓(xùn)練集是有序的,比方說(shuō)正樣本在前負(fù)樣本在后,又設(shè)置了validation_split,那么你的驗(yàn)證集中很可能將全部是負(fù)樣本。
同樣的,這個(gè)東西不會(huì)有任何錯(cuò)誤報(bào)出來(lái),因?yàn)镵eras不可能知道你的數(shù)據(jù)有沒(méi)有經(jīng)過(guò)shuffle,保險(xiǎn)起見如果你的數(shù)據(jù)是沒(méi)shuffle過(guò)的,最好手動(dòng)shuffle一下。
4 Merge層的層對(duì)象與函數(shù)方法
Keras定義了一套用于融合張量的方法,位于keras.layers.Merge,里面有兩套工具,以大寫字母開頭的是Keras Layer類,使用這種工具是需要實(shí)例化一個(gè)Layer對(duì)象,然后再使用。以小寫字母開頭的是張量函數(shù)方法,本質(zhì)上是對(duì)Merge Layer對(duì)象的一個(gè)包裝,但使用更加方便一些。注意辨析。
以上這篇淺談Keras中shuffle和validation_split的順序就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python通過(guò)zlib實(shí)現(xiàn)壓縮與解壓字符串的方法
這篇文章主要介紹了python通過(guò)zlib實(shí)現(xiàn)壓縮與解壓字符串的方法,較為詳細(xì)的介紹了zlib的用法及使用zlib.compressobj和zlib.decompressobj對(duì)文件進(jìn)行壓縮解壓的方法,需要的朋友可以參考下2014-11-11使用 Celery Once 來(lái)防止 Celery 重復(fù)執(zhí)行同一個(gè)任務(wù)
這篇文章主要介紹了使用 Celery Once 來(lái)防止 Celery 重復(fù)執(zhí)行同一個(gè)任務(wù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10基于Python編寫一個(gè)根據(jù)姓名測(cè)性別的小程序
這篇文章主要為大家介紹了如何利用Python編寫一款根據(jù)中文名能猜測(cè)性別的一款界面化的小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-03-03Django web自定義通用權(quán)限控制實(shí)現(xiàn)方法
這篇文章主要介紹了Django web自定義通用權(quán)限控制實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python使用正則表達(dá)式替換匹配成功的組并輸出替換的次數(shù)
正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一個(gè)字符串是否與某種模式匹配。這篇文章主要介紹了python使用正則表達(dá)式替換匹配成功的組并輸出替換的次數(shù),需要的朋友可以參考下2017-11-11python模塊詳解之pywin32使用文檔(python操作windowsAPI)
pywin32是一個(gè)第三方模塊庫(kù),主要的作用是方便python開發(fā)者快速調(diào)用windows API的一個(gè)模塊庫(kù),這篇文章主要給大家介紹了關(guān)于python模塊詳解之pywin32使用文檔的相關(guān)資料,文中將python操作windowsAPI介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01Python使用matplotlib實(shí)現(xiàn)的圖像讀取、切割裁剪功能示例
這篇文章主要介紹了Python使用matplotlib實(shí)現(xiàn)的圖像讀取、切割裁剪功能,結(jié)合實(shí)例形式分析了Python基于matplotlib操作圖片的加載、讀取、坐標(biāo)控制及裁剪相關(guān)操作技巧,需要的朋友可以參考下2018-04-04