Лента градиентов в TensorFlow
Ленту GradientTape открывают
как контекст: внутри блока записывают
операции над тензорами. Переменная
Variable попадает под слежение
сама, как только её используют
в выражении. Тензор из constant
лента не запоминает, пока его
не добавят методом watch.
Создадим переменную, умножим её
на число внутри ленты и выведем
список отслеживаемых переменных
через метод watched_variables:
import tensorflow as tf
w = tf.Variable([1.0, 2.0])
with tf.GradientTape() as tape:
out = w * 3.0
tracked = tape.watched_variables()
print(len(tracked)) # выведет 1
print(tracked[0].numpy()) # выведет [1. 2.]
Для тензора-константы без вызова
watch список остаётся пустым,
даже если константа участвует
в формуле:
import tensorflow as tf
c = tf.constant(4.0)
with tf.GradientTape() as tape:
out = c * 2.0
tracked = tape.watched_variables()
print(len(tracked)) # выведет 0
Если константу явно передать
в метод watch, лента
запомнит её для будущего
градиента. Список watched_variables
по-прежнему содержит только
объекты Variable, но
вызов watch уже выполнен:
import tensorflow as tf
c = tf.constant(4.0)
with tf.GradientTape() as tape:
tape.watch(c)
out = c * 2.0
tracked = tape.watched_variables()
print(len(tracked)) # выведет 0
Создайте переменную с числом
2.0, откройте ленту,
прибавьте к переменной 1.0
и выведите, сколько переменных
отслеживает лента.
Создайте тензор-константу 5.0,
умножьте её на 2.0 внутри
ленты без слежения и выведите
длину списка отслеживаемых
переменных.
Создайте константу 5.0,
добавьте её в ленту через
слежение, сложите с 1.0
и снова выведите длину списка
отслеживаемых переменных.