淺談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)起見(jià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)起見(jiàn)如果你的數(shù)據(jù)是沒(méi)shuffle過(guò)的,最好手動(dòng)shuffle一下。
4 Merge層的層對(duì)象與函數(shù)方法
Keras定義了一套用于融合張量的方法,位于keras.layers.Merge,里面有兩套工具,以大寫(xiě)字母開(kāi)頭的是Keras Layer類(lèi),使用這種工具是需要實(shí)例化一個(gè)Layer對(duì)象,然后再使用。以小寫(xiě)字母開(kāi)頭的是張量函數(shù)方法,本質(zhì)上是對(duì)Merge Layer對(duì)象的一個(gè)包裝,但使用更加方便一些。注意辨析。
以上這篇淺談Keras中shuffle和validation_split的順序就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之樹(shù)回歸詳解
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之樹(shù)回歸的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
django框架中ajax的使用及避開(kāi)CSRF 驗(yàn)證的方式詳解
這篇文章主要介紹了django框架中ajax的使用及避開(kāi)CSRF 驗(yàn)證的方式,結(jié)合實(shí)例形式分析了Django框架ajax后臺(tái)交互與排除驗(yàn)證csrf相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
淺談pyqt5中信號(hào)與槽的認(rèn)識(shí)
這篇文章主要介紹了淺談pyqt5中信號(hào)與槽的認(rèn)識(shí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
python和opencv構(gòu)建運(yùn)動(dòng)檢測(cè)器的實(shí)現(xiàn)
這篇文章主要介紹了python和opencv構(gòu)建運(yùn)動(dòng)檢測(cè)器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
python opencv如何實(shí)現(xiàn)圖片繪制
這篇文章主要介紹了python opencv如何實(shí)現(xiàn)圖片繪制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01

