Несколько переменных в TensorFlow
Чтобы не открывать ленту заново
для каждой переменной, вторым
аргументом метода gradient
передают список источников.
Ответ приходит списком тензоров
в том же порядке.
Создадим две переменные, сложим их квадраты и выведем обе производные:
import tensorflow as tf
x = tf.Variable(2.0)
w = tf.Variable(3.0)
with tf.GradientTape() as tape:
y = x * x + w * w
grads = tape.gradient(y, [x, w])
print(grads[0]) # выведет tf.Tensor(4.0, shape=(), dtype=float32)
print(grads[1]) # выведет tf.Tensor(6.0, shape=(), dtype=float32)
Тот же приём работает в линейной формуле с тремя участниками - вес, смещение и вход:
import tensorflow as tf
x = tf.Variable(2.0)
w = tf.Variable(3.0)
b = tf.Variable(1.0)
with tf.GradientTape() as tape:
y = w * x + b
grads = tape.gradient(y, [w, b, x])
print(grads[0]) # выведет tf.Tensor(2.0, shape=(), dtype=float32)
print(grads[1]) # выведет tf.Tensor(1.0, shape=(), dtype=float32)
print(grads[2]) # выведет tf.Tensor(3.0, shape=(), dtype=float32)
Заведите переменные с числами
5.0 и 2.0, постройте
на ленте сумму их квадратов
и выведите обе частные производные
одним запросом.
Создайте переменные-коэффициенты
4.0 и 1.0, переменную-аргумент
3.0 и на ленте посчитайте
линейную комбинацию коэффициентов
с аргументом плюс свободный член
0.5 из константы. Выведите
производные по всем трём
переменным.
Задайте две переменные-ряда
1.0, 2.0 и 3.0, 4.0,
сложите их поэлементно на ленте
и получите градиенты по обоим
рядам списком.