Размораживание слоев Keras приводит к тому, что процесс обучения начинается с нуля - PullRequest
0 голосов
/ 26 апреля 2018

Я обучил модель с несколькими слоями, чем для каждого слоя в наборе model.layers

layer.trainable = False

Я добавил несколько слоев к этой модели под названием

model.compile(...)

И обучил эту новую модель нескольким эпохам с замороженной частью слоев.

Позже я решил разморозить слои и побежал

for layer in model.layers:
   layer.trainable = True
model.compile(...)

Когда я начинаю изучать модель с незамерзшими слоями, я получаю очень большое значение функции потерь, хотя я просто хотел продолжить обучение с ранее изученными весами. Я также проверил, что после model.compile(...) модель все еще хорошо прогнозирует (не сбрасывая ранее изученные веса), но как только начинается процесс обучения, все «стирается», и я начинаю как с нуля.

Может ли кто-нибудь уточнить, нормально ли это поведение? Как перекомпилировать модель и не начинать с нуля?

P.S. Я также попросил вручную сохранить веса и присвоить их вновь скомпилированной модели, используя layer.get_weights() и layer.set_weights()

Я использовал те же параметры компиляции (похожие optimizer и похожие loss)

1 Ответ

0 голосов
/ 26 апреля 2018

Возможно, вам придется снизить скорость обучения, когда начнете тонкую настройку обучаемых слоев. Например, скорость обучения 0,01 может работать для ваших новых плотных слоев (вверху) со всеми остальными слоями, установленными на непереносимые. Но при настройке всех слоев для обучения вам может потребоваться уменьшить скорость обучения до 0,001. Нет необходимости копировать или устанавливать веса вручную.

...