Keras Как возобновить обучение с Adam Optimizer - PullRequest
0 голосов
/ 02 июня 2019

Моя модель требует много эпох, чтобы получить достойный результат, и использование v100 в Google Cloud занимает несколько часов.

Поскольку я работаю с вытесняемым экземпляром, меня пинает в серединеобучения.Я хотел бы иметь возможность возобновить с того места, где он остановился.

В моем пользовательском CallBack я запускаю self.model.save (...) в on_epoch_end.Также он останавливает тренировку, если счет не улучшился за последние 50 эпох.

Вот шаги, которые я попробовал:

  1. Я запускал model.fit до тех пор, пока не начались ранние остановкипосле эпохи 250 (лучший результат был на эпохе 200)
  2. Я загрузил модель, сохраненную после 100-й эпохи.
  3. Я запустил model.fit с initial_epoch = 100.(Это начинается с эпохи 101).

Однако, чтобы догнать первый запуск, требуется некоторое время.Также показатель точности каждой эпохи приближается к первому этапу, но он ниже.Наконец ранняя остановка наступила примерно на 300, и окончательный результат ниже, чем в первом заезде.Единственный способ получить тот же итоговый результат - это создать модель с нуля и выполнить ее с начала эпохи 1.

Я также пытался использовать float (K.get_value (self.model.optimizer.lr))и K.set_value (self.model.optimizer.lr, new_lr).Однако self.model.optimizer.lr всегда возвращает один и тот же номер.Я предполагаю, что это потому, что оптимизатор Адама вычисляет реальный lr из исходного lr, который я установил с Адамом (lr = 1e-4).

Мне интересно, каков правильный подход к возобновлению обучения с использованием оптимизатора Адама?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Мне интересно, каков правильный подход к возобновлению обучения с использованием оптимизатора Адама?

Как уже упоминалось: https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model, model.save() с последующим load_model() займетзаботиться о компиляции модели с использованием сохраненной конфигурации обучения.

if not os.path.exists('tf_keras_cifar10.h5'):
    model = get_model() #this method constructs the model and compiles it 
else:
    model = load_model('tf_keras_cifar10.h5') #load the model from file
    print('lr is ', K.get_session().run(model.optimizer.lr))
    initial_epoch=10
    epochs=13

history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs,validation_data=(x_test, y_test), initial_epoch=initial_epoch)
model.save('tf_keras_cifar10.h5')
  • В конце начального запуска перед сохранением модели

Epoch 10/10 50000/50000[==============================] - 13 с 255 мкс / выборка - потеря: 0,6257 - в соответствии с: 0,7853 - val_loss: 0,8886 -val_acc: 0,6985

  • Возобновление из сохраненной модели:

Эпоха 11/13 50000/50000 [===============================] - 15s 293us / sample - потеря: 0,6438 - acc: 0,7777 - val_loss: 0,8732 - val_acc: 0,7083

Пожалуйста, проверьте эту проблему, а также связанную свозобновление обучения с использованием Adam Optimizer (tf.keras): https://github.com/tensorflow/tensorflow/issues/27049

Рекомендуется обновить версию TF.

0 голосов
/ 02 июня 2019

Как насчет model.load('saved.h5'). Он также должен загрузить оптимизатор, если вы сохраните его с помощью model.save().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...