亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 keras 中使用批量標準化進行微調

在 keras 中使用批量標準化進行微調

冉冉說 2021-09-25 13:18:14
我已經成功地訓練了一個超過 100000 個樣本的模型,它在訓練集和測試集上都表現良好。然后,我嘗試在一個特定樣本(100000 個樣本之一)上對其進行微調,并使用經過訓練的權重作為初始化。但結果有點奇怪,我相信它是由批量歸一化層引起的。具體來說,我的代碼可以列舉如下:model = mymodel()model.load_weights('./pre_trained.h5') #start from historyrate = model.evaluate(x, y)print(rate)checkpoint = tf.keras.callbacks.ModelCheckpoint('./trained.h5', monitor='loss',        verbose=0, save_best_only=True, mode='min',save_weights_only=True)model.fit(x, y,validation_data=[x, y], epochs=5, verbose=2, callbacks=[checkpoint])model.load_weights('./trained.h5') rate = model.evaluate(x, y) print(rate)mymodel 是一個自定義函數來生成我的模型,由 Dense 和 Batch normalization 組成。x,y 是一個特定樣本的輸入和標簽。我想進一步優化樣本的損失。然而,結果很奇怪: 1/1 [==============================] - 0s 209ms/step-6.087581634521484Train on 1 samples, validate on 1 samplesEpoch 1/200 - 1s - loss: -2.7749e-01 - val_loss: -6.0876e+00Epoch 2/200 - 0s - loss: -2.8791e-01 - val_loss: -6.0876e+00Epoch 3/200 - 0s - loss: -3.0012e-01 - val_loss: -6.0876e+00Epoch 4/200 - 0s - loss: -3.1325e-01 - val_loss: -6.0876e+00如圖所示,首先model.evaluate效果很好,因為損失結果 (-6.087581634521484) 接近加載訓練模型的性能。但是訓練集上的損失(實際上與 中的驗證集相同model.fit())很奇怪。val_loss是正常的,和第一行model.evaluate的結果差不多。所以我真的很納悶,為什么train loss和inference loss的差別還是這么大(train loss更差),因為train sample和validation sample是一樣的,我覺得結果應該也是一樣的,或者至少非常接近。我懷疑問題是由 BN 層引起的,由于 train 和 inference 之間的差異很大。但是,我已經trainable = False在加載預訓練權重之后和之前設置了BN 層的model.fit,但問題沒有解決。out = tf.keras.layers.BatchNormalization(trainable=False)(out)我還是懷疑BN層,不知道settrainable=False是否足以保持BN的參數不變。誰能給我一些建議?非常感謝您的幫助。對不起我的英語,但我盡力解釋我的問題。
查看完整描述

3 回答

  • 3 回答
  • 0 關注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號