我已經成功地訓練了一個超過 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的參數不變。誰能給我一些建議?非常感謝您的幫助。對不起我的英語,但我盡力解釋我的問題。
添加回答
舉報
0/150
提交
取消