Моя модель требует много эпох, чтобы получить достойный результат, и использование v100 в Google Cloud занимает несколько часов.
Поскольку я работаю с вытесняемым экземпляром, меня пинает в серединеобучения.Я хотел бы иметь возможность возобновить с того места, где он остановился.
В моем пользовательском CallBack я запускаю self.model.save (...) в on_epoch_end.Также он останавливает тренировку, если счет не улучшился за последние 50 эпох.
Вот шаги, которые я попробовал:
- Я запускал model.fit до тех пор, пока не начались ранние остановкипосле эпохи 250 (лучший результат был на эпохе 200)
- Я загрузил модель, сохраненную после 100-й эпохи.
- Я запустил 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).
Мне интересно, каков правильный подход к возобновлению обучения с использованием оптимизатора Адама?