Правильно настроить экспоненциальный спад скорости обучения в тензорном потоке

Мне нужно применять экспоненциальное уменьшение скорости обучения каждые 10 эпох. Начальная скорость обучения0.000001, а коэффициент распада 0.95

это правильный способ его настройки?

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
        initial_learning_rate=0.000001, 
        decay_steps=(my_steps_per_epoch*10), 
        decay_rate=0.05)
opt = tf.keras.optimizers.SGD(learning_rate=lr_schedule, momentum=0.9)

Формула экспоненциального затухания: current_lr = initial_lr * (1 - decay_factor)^tРазве что в коде это реализовано как:

decayed_learning_rate = learning_rate *
                      decay_rate ^ (global_step / decay_steps)

Насколько мне известно, decay_rate должно быть 1 - decay_factor а также decay_steps должно означать, сколько шагов выполняется перед применением распада, в моем случае my_steps_per_epoch*10. Это верно?

РЕДАКТИРОВАТЬ:

Если я приостановлю и сохраню свою модель (с помощью обратных вызовов) после 10-й эпохи, а затем продолжу, загрузив модель и вызвав model.fit с initial_epoch=10 а также epochs=11, начнется ли он в 11-й эпохе и применит экспоненциальный спад?

1 ответ

decay_stepsможет использоваться, чтобы указать, через сколько шагов (обработанных пакетов) вы снизите скорость обучения. Я считаю весьма полезным просто указать начальную и конечную скорость обучения и автоматически вычислить decay_factor с помощью следующего:

      initial_learning_rate = 0.1
final_learning_rate = 0.0001
learning_rate_decay_factor = (final_learning_rate / initial_learning_rate)**(1/epochs)
steps_per_epoch = int(train_size/batch_size)

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
                initial_learning_rate=initial_learning_rate,
                decay_steps=steps_per_epoch,
                decay_rate=learning_rate_decay_factor,
                staircase=True)
Другие вопросы по тегам