Атрибут learning_rate
Атрибут learning_rate класса Optimizer хранит текущее значение скорости обучения оптимизатора. Скорость обучения определяет размер шага, на который оптимизатор изменяет веса модели на каждой итерации обучения. Атрибут доступен как для чтения, так и для записи, что позволяет динамически изменять скорость обучения в процессе тренировки.
Значение learning_rate может быть скалярным числом, тензором или объектом расписания скорости обучения (learning rate schedule). При создании оптимизатора это значение задается параметром learning_rate, а затем хранится в одноименном атрибуте.
Синтаксис
optimizer.learning_rate
Пример
Давайте создадим оптимизатор SGD с начальной скоростью обучения 0.1 и выведем значение атрибута:
import tensorflow as tf
optimizer = tf.keras.optimizers.SGD(learning_rate=0.1)
print(optimizer.learning_rate)
Результат выполнения кода:
0.1
Пример
Давайте создадим оптимизатор Adam и изменим скорость обучения через атрибут:
import tensorflow as tf
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
print("Before:", optimizer.learning_rate.numpy())
optimizer.learning_rate = 0.01
print("After:", optimizer.learning_rate.numpy())
Результат выполнения кода:
Before: 0.001
After: 0.01
Пример
Давайте используем расписание скорости обучения ExponentialDecay и посмотрим, как меняется значение атрибута:
import tensorflow as tf
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=0.1,
decay_steps=1000,
decay_rate=0.9
)
optimizer = tf.keras.optimizers.SGD(learning_rate=lr_schedule)
print(optimizer.learning_rate)
Результат выполнения кода:
<keras.optimizers.schedules.learning_rate_schedule.ExponentialDecay object at 0x...>
Пример
Давайте применим оптимизатор к переменной и проследим, как скорость обучения влияет на обновление весов:
import tensorflow as tf
var = tf.Variable([1.0, 2.0, 3.0])
optimizer = tf.keras.optimizers.SGD(learning_rate=0.1)
with tf.GradientTape() as tape:
loss = tf.reduce_sum(var ** 2)
grads = tape.gradient(loss, [var])
optimizer.apply_gradients(zip(grads, [var]))
print("Updated var:", var.numpy())
print("Learning rate:", optimizer.learning_rate.numpy())
Результат выполнения кода:
Updated var: [0.8 1.6 2.4]
Learning rate: 0.1
Смотрите также
-
класс
Optimizer,
который является базовым классом для всех оптимизаторов -
метод
apply_gradients,
который применяет градиенты к переменным -
метод
minimize,
который выполняет один шаг оптимизации -
атрибут
iterations,
который хранит количество выполненных шагов оптимизатора