天天看點

keras注意事項一

關于驗證集:

如果在model.fit中設定validation_spilt的值,則可将資料分為訓練集和驗證集,例如,設定該值為0.1,則訓練集的最後10%資料将作為驗證集,設定其他數字同理。注意,原資料在進行驗證集分割前并沒有被shuffle,是以這裡的驗證集嚴格的就是你輸入資料最末的x%。

向BN層中載入權重:

按照BN的文章順序,似乎載入Keras BN層的參數應該是[mean, std, gamma, beta];

然而不是的,Keras的BN層參數順序應該是[gamma, beta, mean, std],這是因為gamma和beta是可訓練的參數,而mean和std不是;

Keras的可訓練參數在前,不可訓練參數在後;

錯誤的權重順序不會引起任何報錯,因為它們的shape完全相同。

shuffle和validation_split的順序:(和第一點類似)

模型的fit函數有兩個參數,shuffle用于将資料打亂,validation_split用于在沒有提供驗證集的時候,按一定比例從訓練集中取出一部分作為驗證集;

這裡有個陷阱是,程式是先執行validation_split,再執行shuffle的,是以會出現這種情況:假如你的訓練集是有序的,比方說正樣本在前負樣本在後,又設定了validation_split,那麼你的驗證集中很可能将全部是負樣本;

同樣的,這個東西不會有任何錯誤報出來,因為Keras不可能知道你的資料有沒有經過shuffle,保險起見如果你的資料是沒shuffle過的,最好手動shuffle一下。