РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
375 of 824 menu

Метод gradient класса GradientTape

Метод gradient класса GradientTape вычисляет градиент целевой функции по отношению к исходным тензорам, которые были записаны на ленте с помощью метода watch. Первым параметром метод принимает целевую функцию (тензор или список тензоров), вторым - исходный тензор или список тензоров, по которым вычисляется градиент. Третьим параметром можно передать необязательный аргумент unconnected_gradients, определяющий поведение при отсутствии связи между целевой функцией и исходным тензором.

Метод возвращает тензор градиента той же формы, что и исходный тензор, либо список тензоров, если исходных тензоров было несколько.

Синтаксис

tape.gradient(target, sources, [unconnected_gradients])

Пример

Давайте вычислим градиент функции y = x² по переменной x в точке 3. Аналитически производная равна 2x, то есть 6:

import tensorflow as tf x = tf.Variable(3.0) with tf.GradientTape() as tape: y = x ** 2 res = tape.gradient(y, x) print(res)

Результат выполнения кода:

tf.Tensor(6.0, shape=(), dtype=float32)

Пример

Давайте вычислим градиент для тензора, созданного через tf.constant. Так как константы автоматически не отслеживаются, нужно явно вызвать метод watch:

import tensorflow as tf x = tf.constant([1, 2, 3, 4, 5], dtype=tf.float32) with tf.GradientTape() as tape: tape.watch(x) y = x ** 2 res = tape.gradient(y, x) print(res)

Результат выполнения кода:

tf.Tensor([ 2. 4. 6. 8. 10.], shape=(5,), dtype=float32)

Пример

Давайте вычислим градиенты по нескольким переменным. Передадим в качестве второго параметра список тензоров и получим список градиентов:

import tensorflow as tf x = tf.Variable(2.0) y = tf.Variable(3.0) with tf.GradientTape() as tape: z = x ** 2 + y ** 3 res = tape.gradient(z, [x, y]) print(res)

Результат выполнения кода:

[<tf.Tensor: shape=(), dtype=float32, numpy=4.0>, <tf.Tensor: shape=(), dtype=float32, numpy=27.0>]

Пример

Давайте вычислим градиент двумерного тензора и убедимся, что форма результата совпадает с формой исходного тензора:

import tensorflow as tf x = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32) with tf.GradientTape() as tape: tape.watch(x) y = tf.reduce_sum(x ** 2) res = tape.gradient(y, x) print(res)

Результат выполнения кода:

tf.Tensor( [[ 2. 4. 6.] [ 8. 10. 12.]], shape=(2, 3), dtype=float32)

Пример

Давайте вычислим градиент по переменной, не участвующей в вычислении целевой функции. По умолчанию метод вернет None:

import tensorflow as tf x = tf.Variable(2.0) y = tf.Variable(3.0) with tf.GradientTape() as tape: z = x ** 2 res = tape.gradient(z, y) print(res)

Результат выполнения кода:

None

Пример

Давайте передадим аргумент unconnected_gradients со значением 'zero', чтобы вместо None получить нулевой тензор:

import tensorflow as tf x = tf.Variable(2.0) y = tf.Variable(3.0) with tf.GradientTape() as tape: z = x ** 2 res = tape.gradient(z, y, unconnected_gradients='zero') print(res)

Результат выполнения кода:

tf.Tensor(0.0, shape=(), dtype=float32)

Смотрите также

  • класс GradientTape,
    который записывает операции для автоматического дифференцирования
  • метод watch,
    который начинает отслеживание тензора на ленте
  • метод jacobian,
    который вычисляет матрицу Якоби целевой функции
  • метод reset,
    который очищает записи ленты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить