Метод apply_gradients класса Optimizer
Метод apply_gradients класса Optimizer применяет градиенты к переменным модели. Первым параметром метод принимает список пар (gradient, variable), где gradient - тензор градиента, а variable - переменная, к которой этот градиент применяется. Вторым необязательным параметром передаётся имя операции name. Метод выполняет один шаг оптимизации: обновляет значения переменных согласно алгоритму оптимизатора (SGD, Adam и так далее) и возвращает результат применения операции.
Синтаксис
optimizer.apply_gradients(grads_and_vars, [name])
Пример
Давайте создадим простую модель, вычислим градиенты и применим их с помощью оптимизатора:
import tensorflow as tf
tf.random.set_seed(0)
optimizer = tf.keras.optimizers.SGD(learning_rate=0.1)
var = tf.Variable([1.0, 2.0, 3.0])
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)>
Пример
Давайте применим градиенты сразу к нескольким переменным:
Результат выполнения кода:
<tf.Variable 'Variable:0' shape=(2,) dtype=float32, numpy=array([0.8, 1.6], dtype=float32)>
<tf.Variable 'Variable:0' shape=(2,) dtype=float32, numpy=array([2.4, 3.2], dtype=float32)>
Пример
Давайте применим градиенты с оптимизатором Adam:
import tensorflow as tf
tf.random.set_seed(0)
optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)
var = tf.Variable([1.0, 2.0, 3.0])
for step in range(3):
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.97, 1.97, 2.97], dtype=float32)>
Смотрите также
-
класс
Optimizer,
который является базовым классом для всех оптимизаторов -
метод
minimize,
который вычисляет градиенты и применяет их за один вызов -
метод
update_step,
который выполняет один шаг обновления переменных -
атрибут
learning_rate,
который задаёт скорость обучения оптимизатора