Атрибут variables класса Optimizer
Атрибут variables класса Optimizer возвращает список тензоров-переменных,
которые были созданы оптимизатором. Эти переменные хранят внутреннее состояние
оптимизатора, например, накопленные моменты или счетчики шагов.
Атрибут доступен только для чтения и не принимает параметров.
Изначально список пуст и заполняется после вызова методов build
или apply_gradients.
Синтаксис
optimizer.variables
Пример
Давайте создадим оптимизатор и посмотрим на его атрибут variables
до применения градиентов:
import tensorflow as tf
optimizer = tf.keras.optimizers.SGD(learning_rate=0.1)
print(optimizer.variables)
Результат выполнения кода:
[]
Пример
Давайте создадим переменную и применим градиенты, чтобы оптимизатор инициализировал свои внутренние переменные:
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(optimizer.variables)
Результат выполнения кода:
[]
Пример
Давайте создадим оптимизатор Adam, который хранит моменты, и посмотрим на его переменные после применения градиентов:
import tensorflow as tf
var = tf.Variable([1.0, 2.0, 3.0])
optimizer = tf.keras.optimizers.Adam(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(optimizer.variables)
Результат выполнения кода:
[<tf.Variable 'iteration:0' shape=() dtype=int64, numpy=1>, <tf.Variable 'momentum:0' shape=(3,) dtype=float32, numpy=array([ 2., 4., 6.], dtype=float32)>, <tf.Variable 'velocity:0' shape=(3,) dtype=float32, numpy=array([0.2, 0.4, 0.6], dtype=float32)>]
Пример
Давайте выведем количество и имена переменных оптимизатора Adam после одного шага обучения:
import tensorflow as tf
var = tf.Variable([1.0, 2.0, 3.0])
optimizer = tf.keras.optimizers.Adam(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("Count:", len(optimizer.variables))
for v in optimizer.variables:
print(v.name, v.shape)
Результат выполнения кода:
"Count: 3"
"iteration:0 ()"
"momentum:0 (3,)"
"velocity:0 (3,)"
Смотрите также
-
класс
Optimizer,
который является базовым классом для всех оптимизаторов -
метод
apply_gradients,
который применяет градиенты к переменным -
метод
build,
который создает переменные оптимизатора -
атрибут
iterations,
который возвращает число шагов оптимизатора