Я успешно обучил модель более 100000 образцов, которая хорошо работает как в наборе поездов, так и в тестовом наборе.Затем я попытался настроить его на один конкретный образец (один из 100000 образцов) и использовать тренировочные веса в качестве инициализации.
Но результат немного странный, и я считаю, что он вызван уровнем нормализации партии.В частности, мой код может быть указан следующим образом:
model = mymodel()
model.load_weights('./pre_trained.h5') #start from history
rate = 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 ('./ train.h5') rate = model.evaluate (x, y) print (rate)
mymodel - это функция самоопределения для генерации моей модели, состоящая из нормализации плотности и партии.x, y - ввод и метка одного конкретного образца.Я хочу дополнительно оптимизировать потери образца.Однако результаты выглядят странно:
1/1 [==============================] - 0s 209ms/step
-6.087581634521484
Train on 1 samples, validate on 1 samples
Epoch 1/200
- 1s - loss: -2.7749e-01 - val_loss: -6.0876e+00
Epoch 2/200
- 0s - loss: -2.8791e-01 - val_loss: -6.0876e+00
Epoch 3/200
- 0s - loss: -3.0012e-01 - val_loss: -6.0876e+00
Epoch 4/200
- 0s - loss: -3.1325e-01 - val_loss: -6.0876e+00
Как показано, сначала model.evaluate
работает хорошо, так как результат потери (-6.087581634521484) близок к производительности загруженной обученной модели.Но потеря в наборе поездов (фактически такая же, как в валидации model.fit()
) странная.Значение val_loss нормальное, аналогично результатам модели. Оцените в первой строке.Так что я действительно озадачен тем, почему все еще большая разница между потерей поезда и потерей вывода (потеря поезда хуже), так как выборка поезда и выборка проверки одинаковы, я думаю, что результат также должен быть одинаковымили, по крайней мере, очень близко. Я подозреваю, что проблема вызвана уровнем BN, из-за большой разницы между поездом и выводом.Тем не менее, я уже установил trainable = False
слоя BN после загрузки предварительно обученных весов и до model.fit
, но проблема не решена.
out = tf.keras.layers.BatchNormalization(trainable=False)(out)
Я все еще сомневаюсь в слое BN и задаюсь вопросом, достаточно ли установить trainable=False
, чтобы параметры BN были одинаковыми.
Может кто-нибудь дать мне какой-нибудь совет?Большое спасибо за вашу помощь заранее.Извините за мой английский, но я изо всех сил старался объяснить мою проблему.