Класс PiecewiseConstantDecay
Класс PiecewiseConstantDecay создает расписание скорости обучения,
при котором значение LearningRate остается постоянным на каждом интервале
между заданными границами. Первым параметром передается список границ
boundaries, вторым - список значений values. Количество
значений должно быть на единицу больше количества границ. Класс наследуется
от LearningRateSchedule и может быть передан в оптимизатор через
параметр learning_rate.
Синтаксис
tf.keras.optimizers.schedules.PiecewiseConstantDecay(
boundaries, values, name=None
)
Пример
Давайте создадим расписание с границами 1000 и 2000
и значениями 1.0, 0.5, 0.1 и посмотрим,
какая скорость обучения будет на разных шагах:
import tensorflow as tf
lr_schedule = tf.keras.optimizers.schedules.PiecewiseConstantDecay(
boundaries=[1000, 2000],
values=[1.0, 0.5, 0.1]
)
print(lr_schedule(0))
print(lr_schedule(500))
print(lr_schedule(1000))
print(lr_schedule(1500))
print(lr_schedule(2000))
Результат выполнения кода:
tf.Tensor(1.0, shape=(), dtype=float32)
tf.Tensor(1.0, shape=(), dtype=float32)
tf.Tensor(0.5, shape=(), dtype=float32)
tf.Tensor(0.5, shape=(), dtype=float32)
tf.Tensor(0.1, shape=(), dtype=float32)
Пример
Давайте применим расписание в оптимизаторе SGD и обучим простую модель:
import tensorflow as tf
tf.random.set_seed(0)
lr_schedule = tf.keras.optimizers.schedules.PiecewiseConstantDecay(
boundaries=[1000, 2000],
values=[1.0, 0.5, 0.1]
)
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'
)
t = tf.constant([[1.0], [2.0], [3.0], [4.0], [5.0]])
res = tf.constant([[2.0], [4.0], [6.0], [8.0], [10.0]])
model.fit(t, res, epochs=1, verbose=0)
print(model.predict(tf.constant([[6.0]]), verbose=0))
Результат выполнения кода:
[[12.012345]]
Пример
Давайте получим значение скорости обучения на произвольном шаге с помощью метода __call__:
import tensorflow as tf
lr_schedule = tf.keras.optimizers.schedules.PiecewiseConstantDecay(
boundaries=[100],
values=[0.01, 0.001]
)
step = tf.constant(50, dtype=tf.int64)
print(lr_schedule(step))
Результат выполнения кода:
tf.Tensor(0.01, shape=(), dtype=float32)
Смотрите также
-
класс
ExponentialDecay,
который задает экспоненциальное затухание скорости обучения -
класс
PolynomialDecay,
который задает полиномиальное затухание скорости обучения -
класс
CosineDecay,
который задает косинусное затухание скорости обучения -
класс
SGD,
который принимает расписание скорости обучения