Класс Optimizer
Класс Optimizer является абстрактным базовым классом для всех оптимизаторов в TensorFlow.
Он напрямую не используется для обучения моделей, но задаёт общий интерфейс, который реализуют
конкретные оптимизаторы: SGD, Adam, RMSprop и другие. Класс хранит
гиперпараметры (например, скорость обучения), управляет переменными состояния оптимизатора
и предоставляет методы для применения градиентов к весам модели.
Основные атрибуты класса: learning_rate - скорость обучения, iterations -
количество выполненных шагов оптимизации, variables - список переменных состояния
оптимизатора. Основные методы: apply_gradients - применяет градиенты к переменным,
minimize - вычисляет градиенты и применяет их за один вызов, get_config -
возвращает конфигурацию оптимизатора, from_config - создаёт оптимизатор из конфигурации.
Синтаксис
tf.keras.optimizers.Optimizer(learning_rate, [name], [weight_decay])
Пример
Напрямую класс Optimizer не создают. Вместо него используют конкретные оптимизаторы,
например SGD. Создадим оптимизатор SGD со скоростью обучения 0.01 и применим
его для обучения простой модели:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
print(type(optimizer).__mro__[1])
Результат выполнения кода:
<class 'keras.src.optimizers.base_optimizer.BaseOptimizer'>
Пример
Посмотрим на атрибут learning_rate и метод get_config конкретного оптимизатора:
import tensorflow as tf
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
print(optimizer.learning_rate)
print(optimizer.iterations)
print(optimizer.get_config())
Результат выполнения кода:
0.001
<tf.Variable 'iteration:0' shape=() dtype=int64, numpy=0>
{'name': 'adam', 'learning_rate': 0.001, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-07, 'amsgrad': False}
Пример
Применим метод apply_gradients, унаследованный от класса Optimizer,
чтобы вручную обновить переменную:
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(var)
Результат выполнения кода:
<tf.Variable 'Variable:0' shape=(3,) dtype=float32, numpy=array([0.8, 1.6, 2.4], dtype=float32)>
Смотрите также
-
метод
apply_gradients,
который применяет градиенты к переменным -
метод
minimize,
который вычисляет градиенты и применяет их за один вызов -
метод
get_config,
который возвращает конфигурацию оптимизатора -
атрибут
learning_rate,
который хранит скорость обучения