Я смотрю на этот пост и ответ @Rubens_Zimbres. Я хочу умножить свою скорость обучения на 0,95 каждые 5 эпох, как в этом отчете (в разделе 3. Архитектура в последнем абзаце). Для этого я использую код из git .
Я упростил цикл обучения:
for epoch_cnt in range(nb_epoch):
lrate=LearningRateScheduler(keras_model.step_decay)
hist = model.fit_generator(X_train,y_train,nb_epoch=5,callbacks=lrate)
в другом файле (keras_model) Я реализовал функцию для распада:
def step_decay(epoch):
initial_lrate = 0.001
drop = 0.95
lrate = initial_lrate * (drop**(np.floor(epoch/5)))
print(lrate)
return lrate
Вывод выглядит следующим образом:
Эпоха 1/5
0,001
- 4 с - потеря: 0,6610 - val_loss: 1,0149 Эпоха 2/5
0,001
- 4с - потеря: 0,7534 - потеря_валоса: 1,0996 Эпоха 3/5
* * 0,001 тысячу тридцать один
- 4 с - потери: 0,6687 - потери по величине: 0,3643 Эпоха 4/5
* * 0,001 тысяча тридцать-семь
- 4 с - потери: 0,7048 - потери по величине: 1,1870 Эпоха 5/5
0,001
- 4 с - потери: 0,6675 - потери по величине: 0,5315
Очевидная проблема заключается в том, что при каждом вызове fit_generator()
номер эпохи для Keras сбрасывается на 0. У меня есть два вопроса:
- Как реализовать такой экспоненциальный спад? Могу ли я добавить мой общий счет как в
def step_decay(epoch,total)
? как мне позвонить с fit_generator()
?
- Это вообще можно повторно использовать для оптимизатора Адама?