Класс CosineDecayRestarts
Класс CosineDecayRestarts создает расписание скорости обучения,
при котором значение плавно убывает по косинусоиде от начальной скорости
до минимальной, после чего снова возвращается к начальной скорости и
цикл повторяется. Такой подход помогает модели выходить из локальных
минимумов и лучше исследовать пространство параметров.
Первым параметром передается начальная скорость обучения,
вторым - количество шагов до первого перезапуска,
третьим - множитель, на который умножается длина каждого следующего цикла,
четвертым - множитель, на который умножается начальная скорость при каждом перезапуске,
пятым - минимальная скорость обучения.
Класс наследуется от LearningRateSchedule и может быть передан
в параметр learning_rate при компиляции модели.
Синтаксис
tf.keras.optimizers.schedules.CosineDecayRestarts(
initial_learning_rate,
first_decay_steps,
t_mul=1.0,
m_mul=1.0,
alpha=0.0,
name=None
)
Пример
Давайте создадим расписание с начальной скоростью 0.1
и первым циклом в 100 шагов, затем посмотрим значение
скорости обучения на нескольких шагах:
import tensorflow as tf
schedule = tf.keras.optimizers.schedules.CosineDecayRestarts(
initial_learning_rate=0.1,
first_decay_steps=100
)
print(schedule(0))
print(schedule(50))
print(schedule(100))
Результат выполнения кода:
tf.Tensor(0.1, shape=(), dtype=float32)
tf.Tensor(0.025000004, shape=(), dtype=float32)
tf.Tensor(0.0, shape=(), dtype=float32)
Пример
Давайте передадим расписание в оптимизатор и обучим простую модель:
import tensorflow as tf
tf.random.set_seed(0)
schedule = tf.keras.optimizers.schedules.CosineDecayRestarts(
initial_learning_rate=0.01,
first_decay_steps=10
)
optimizer = tf.keras.optimizers.SGD(learning_rate=schedule)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
model.compile(optimizer=optimizer, loss='mse')
x = tf.constant([[1.0], [2.0], [3.0], [4.0]])
y = tf.constant([[2.0], [4.0], [6.0], [8.0]])
model.fit(x, y, epochs=2, verbose=0)
res = model.predict(tf.constant([[5.0]]), verbose=0)
print(res)
Результат выполнения кода:
[[9.663717]]
Пример
Давайте настроим несколько перезапусков с увеличенной длиной циклов и ненулевой минимальной скоростью:
import tensorflow as tf
schedule = tf.keras.optimizers.schedules.CosineDecayRestarts(
initial_learning_rate=0.1,
first_decay_steps=100,
t_mul=2.0,
m_mul=0.5,
alpha=0.01
)
for step in [0, 50, 100, 200, 300]:
print(step, float(schedule(step)))
Результат выполнения кода:
0 0.1
50 0.032500003
100 0.055
200 0.001
300 0.032500003
Смотрите также
-
класс
CosineDecay,
который задает косинусное затухание без перезапусков -
класс
ExponentialDecay,
который задает экспоненциальное затухание скорости обучения -
класс
PiecewiseConstantDecay,
который задает кусочно-постоянное расписание скорости обучения -
класс
PolynomialDecay,
который задает полиномиальное затухание скорости обучения