РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
449 of 824 menu

Класс 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,
    который задает полиномиальное затухание скорости обучения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить