Класс ExponentialDecay
Класс ExponentialDecay создает график скорости обучения, который экспоненциально уменьшается с течением времени. Первым параметром передается начальная скорость обучения, вторым - количество шагов до первого затухания, третьим - коэффициент затухания. Также можно указать staircase для ступенчатого изменения скорости.
Синтаксис
tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate,
decay_steps,
decay_rate,
staircase=False
)
Пример
Давайте создадим график экспоненциального затухания и посмотрим на значения скорости обучения для нескольких шагов:
import tensorflow as tf
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=0.1,
decay_steps=10,
decay_rate=0.9
)
for step in [0, 10, 20, 30]:
lr = lr_schedule(step)
print(f"Step {step}: {lr.numpy():.6f}")
Результат выполнения кода:
Step 0: 0.100000
Step 10: 0.090000
Step 20: 0.081000
Step 30: 0.072900
Пример
Давайте применим график затухания в оптимизаторе и обучим простую модель:
import tensorflow as tf
import numpy as np
tf.random.set_seed(0)
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=0.01,
decay_steps=100,
decay_rate=0.96
)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
model.compile(
optimizer=tf.keras.optimizers.SGD(learning_rate=lr_schedule),
loss='mse'
)
x = np.array([[1.0], [2.0], [3.0], [4.0]])
y = np.array([[2.0], [4.0], [6.0], [8.0]])
history = model.fit(x, y, epochs=2, verbose=0)
print("Training completed")
Результат выполнения кода:
"Training completed"
Пример
Давайте создадим график со ступенчатым изменением скорости обучения:
import tensorflow as tf
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=0.1,
decay_steps=10,
decay_rate=0.5,
staircase=True
)
for step in [0, 9, 10, 19, 20]:
lr = lr_schedule(step)
print(f"Step {step}: {lr.numpy():.4f}")
Результат выполнения кода:
Step 0: 0.1000
Step 9: 0.1000
Step 10: 0.0500
Step 19: 0.0500
Step 20: 0.0250
Смотрите также
-
класс
Constant,
который задает постоянную скорость обучения -
класс
PiecewiseConstantDecay,
который задает ступенчатое изменение скорости обучения -
класс
InverseTimeDecay,
который реализует обратное временное затухание -
класс
CosineDecay,
который реализует косинусное затухание скорости обучения