Система уравнений в TensorFlow
Функция solve из блока
линейной алгебры находит вектор
x, для которого выполняется
A x = b. Коэффициенты
и правая часть могут быть
переменными - тогда лента
проводит градиент через
найденное решение.
Зададим таблицу 2×2
и столбец правых частей,
выведем корень и производные
суммы координат по коэффициентам:
import tensorflow as tf
A = tf.Variable([[2.0, 1.0], [1.0, 3.0]])
b = tf.Variable([[5.0], [7.0]])
with tf.GradientTape() as tape:
sol = tf.linalg.solve(A, b)
loss = tf.reduce_sum(sol)
gA, gb = tape.gradient(loss, [A, b])
print(sol) # выведет tf.Tensor([[1.5999999] [1.8000001]], shape=(2, 1), dtype=float32)
print(gA) # выведет tf.Tensor([[-0.64 -0.72] [-0.32 -0.36]], shape=(2, 2), dtype=float32)
print(gb) # выведет tf.Tensor([[0.4] [0.2]], shape=(2, 1), dtype=float32)
Скаляр можно взять и из одной координаты решения - градиент пойдёт по тем же правилам:
import tensorflow as tf
A = tf.Variable([[2.0, 1.0], [1.0, 3.0]])
b = tf.Variable([[5.0], [7.0]])
with tf.GradientTape() as tape:
sol = tf.linalg.solve(A, b)
loss = sol[0, 0]
gA = tape.gradient(loss, A)
print(gA) # выведет tf.Tensor([[-0.96 -1.08] [ 0.32 0.36]], shape=(2, 2), dtype=float32)
Составьте систему 2×2
с таблицей коэффициентов
[[3.0, 1.0], [1.0, 2.0]]
и столбцом правых частей
[[4.0], [3.0]]. Найдите
корень, возьмите сумму его
координат и выведите производные
этой суммы по таблице и
по столбцу.
Для той же размерности задайте свои коэффициенты и правые части, получите решение на ленте и выведите градиент первой координаты корня по таблице коэффициентов.
Постройте систему из двух уравнений с двумя неизвестными, сделайте переменными и таблицу, и столбец свободных членов. Выведите корень и частную производную суммы координат по первому элементу столбца.