Класс InverseTimeDecay
Класс InverseTimeDecay создает график скорости обучения,
при котором скорость обучения уменьшается по формуле
initial_learning_rate / (1 + decay_rate * step / decay_steps).
Первым параметром передается начальная скорость обучения,
вторым - количество шагов до применения затухания,
третьим - скорость затухания.
Четвертым необязательным параметром можно передать
флаг staircase, который делает изменение
скорости обучения ступенчатым.
Синтаксис
tf.keras.optimizers.schedules.InverseTimeDecay(
initial_learning_rate,
decay_steps,
decay_rate,
staircase=False
)
Пример
Давайте создадим график обратного временного затухания и вычислим скорость обучения на нескольких шагах:
import tensorflow as tf
lr_schedule = tf.keras.optimizers.schedules.InverseTimeDecay(
initial_learning_rate=0.1,
decay_steps=1.0,
decay_rate=0.5
)
for step in range(5):
lr = lr_schedule(step)
print(f"Step {step}: lr = {lr.numpy():.4f}")
Результат выполнения кода:
Step 0: lr = 0.1000
Step 1: lr = 0.0667
Step 2: lr = 0.0500
Step 3: lr = 0.0400
Step 4: lr = 0.0333
Пример
Давайте создадим график со ступенчатым изменением скорости обучения:
import tensorflow as tf
lr_schedule = tf.keras.optimizers.schedules.InverseTimeDecay(
initial_learning_rate=0.1,
decay_steps=2.0,
decay_rate=0.5,
staircase=True
)
for step in range(6):
lr = lr_schedule(step)
print(f"Step {step}: lr = {lr.numpy():.4f}")
Результат выполнения кода:
Step 0: lr = 0.1000
Step 1: lr = 0.1000
Step 2: lr = 0.0667
Step 3: lr = 0.0667
Step 4: lr = 0.0500
Step 5: lr = 0.0500
Пример
Давайте применим график обратного временного затухания к оптимизатору и обучим простую модель:
import tensorflow as tf
tf.random.set_seed(0)
lr_schedule = tf.keras.optimizers.schedules.InverseTimeDecay(
initial_learning_rate=0.01,
decay_steps=10.0,
decay_rate=0.5
)
optimizer = tf.keras.optimizers.SGD(learning_rate=lr_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]])
history = model.fit(x, y, epochs=3, verbose=0)
print(f"Final loss: {history.history['loss'][-1]:.4f}")
Результат выполнения кода:
Final loss: 0.3195
Смотрите также
-
класс
ExponentialDecay,
который реализует экспоненциальное затухание скорости обучения -
класс
PolynomialDecay,
который реализует полиномиальное затухание скорости обучения -
класс
CosineDecay,
который реализует косинусное затухание скорости обучения -
класс
PiecewiseConstantDecay,
который реализует кусочно-постоянное затухание скорости обучения