#tensorflow #machine-learning #keras #tf.keras
Вопрос:
Рассмотрите следующую информацию:
- начальная скорость обучения: 0,0002
- коэффициент затухания: 0,7
- эфок: 70
Моя проблема состоит в том, чтобы выбрать шаг распада таким образом, чтобы распад происходил каждые две эпохи. Как я могу исправить это в Керасе?
Это формула экспоненциальной скорости обучения с затуханием:
Ответ №1:
Похоже, LearningRateScheduler
можно было бы использовать экспоненциальный расчет. Чтобы распадался каждые две эпохи, decay_steps
так и должно быть num_steps_per_epoch * 2
. Также укажите staircase
параметр True
так, чтобы скорость обучения дискретно снижалась.
Что-то вроде этого (я не запускал этот код):
initial_learning_rate = 0.0002
steps_per_epoch = ...
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate,
decay_steps=steps_per_epoch * 2,
decay_rate=0.7,
staircase=True)
Затем перейдите lr_schedule
к Adam
использованию learning_rate
параметра.
Комментарии:
1. Какое значение вы обычно выбираете для steps_per_epoch?
2. Это зависит от размера набора данных и размера пакета. В своем вопросе вы сказали, что хотите обновлять каждые две эпохи. Итак, допустим, у вас есть 1000 образцов и размер партии 20, тогда эпоха будет 1000/220 = 50 шагов (
steps_per_epoch = 50
).3. В моем случае у меня 1905 образцов и размер партии = 32, поэтому steps_per_epoch = 1905/32 = 59,53 => 60 ??
4. Ага. Я думаю, что
decay_steps
это должно быть целое число, потомуstaircase
что параметр в основном указываетExponentialDecay
расписанию выполнять целочисленное деление в(global_step / decay_steps)
части вычисления по вашему изображению. Я бы сдалdecay_steps=119
(59,5 * 2).5. Это должно быть только в том случае, если, например,
steps_per_epoch
уже не является int, но это ни здесь, ни там. Мой ответ отвечает на ваш вопрос? Если это так, подумайте о том, чтобы отметить его как таковой.