Spec-Zone.ru › TensorFlow 2.9

tf.compat.v1.gradients

Строит символические производные суммы ys по x в xs.

tf.compat.v1.gradients(
    ys,
    xs,
    grad_ys=None,
    name='gradients',
    colocate_gradients_with_ops=False,
    gate_gradients=False,
    aggregation_method=None,
    stop_gradients=None,
    unconnected_gradients=tf.UnconnectedGradients.NONE
)

ys и xs — это каждый Tensor или список тензоров. grad_ys — это список Tensor, содержащий градиенты, полученные от ys. Список должен иметь такую же длину, как ys.

gradients() добавляет в граф операции для вывода производных ys по xs. Возвращает список Tensor длиной len(xs), где каждый тензор является sum(dy/dx) для y в ys и для x в xs.

grad_ys — это список тензоров той же длины, что и ys и содержащий начальные градиенты для каждого y в ys. Когда grad_ys равно None, для каждого y в ys мы заполняем тензор из «1» размером y. Пользователь может предоставить собственные начальные grad_ys, чтобы вычислить производные, используя для каждого y другой начальный градиент (например, если необходимо по-разному взвешивать градиент для каждого значения в каждом y).

stop_gradients — это Tensor или список тензоров, которые должны рассматриваться как константы по отношению ко всем xs. Эти тензоры не будут проходить обратное распространение, как если бы они были явно отключены с помощью stop_gradient. Среди прочего, это позволяет вычислять частные производные вместо полных. Например:

a = tf.constant(0.)
b = 2 * a
g = tf.gradients(a + b, [a, b], stop_gradients=[a, b])

Здесь частные производные g равны [1.0, 1.0], по сравнению с полными производными tf.gradients(a + b, [a, b]), которые учитывают влияние a на b и равны [3.0, 1.0]. Обратите внимание, что вышеуказанное эквивалентно:

a = tf.stop_gradient(tf.constant(0.))
b = tf.stop_gradient(2 * a)
g = tf.gradients(a + b, [a, b])

stop_gradients предоставляет способ остановить градиент после того, как граф уже был построен, в отличие от tf.stop_gradient, который используется при построении графа. При совместном использовании двух подходов обратное распространение прекращается как в узлах tf.stop_gradient, так и в узлах в stop_gradients, в зависимости от того, что встретится раньше.

Все целочисленные тензоры считаются постоянными по отношению ко всем xs, как если бы они были включены в stop_gradients.

unconnected_gradients определяет значение, возвращаемое для каждого x в xs, если оно не связано в графе с ys. По умолчанию это None, чтобы предотвратить ошибки. Математически эти градиенты равны нулю, что можно запросить с помощью параметра 'zero'. tf.UnconnectedGradients предоставляет следующие варианты и поведение:

a = tf.ones([1, 2])
b = tf.ones([3, 1])
g1 = tf.gradients([b], [a], unconnected_gradients='none')
sess.run(g1)  # [None]

g2 = tf.gradients([b], [a], unconnected_gradients='zero')
sess.run(g2)  # [array([[0., 0.]], dtype=float32)]

Рассмотрим один практический пример, который возникает на стадии обратного распространения. Эта функция используется для вычисления производных функции стоимости по весам Ws и смещениям bs. Ниже приведен пример реализации, который поясняет, для чего она используется:

Ws = tf.constant(0.)
bs = 2 * Ws
cost = Ws + bs  # This is just an example. So, please ignore the formulas.
g = tf.gradients(cost, [Ws, bs])
dCost_dW, dCost_db = g
Аргументы
ys Tensor или список тензоров, которые необходимо продифференцировать.
xs Tensor или список тензоров, используемых для дифференцирования.
grad_ys Необязательно. Tensor или список тензоров того же размера, что и ys и содержащих градиенты, вычисленные для каждого y в ys.
name Необязательное имя для группировки всех операций градиента. По умолчанию равно 'gradients'.
colocate_gradients_with_ops Если True, попытаться разместить градиенты вместе с соответствующей операцией.
gate_gradients Если True, добавить кортеж вокруг возвращаемых градиентов для операций. Это предотвращает некоторые проблемы с гонками.
aggregation_method Указывает метод объединения градиентных слагаемых. Допустимые значения — константы, определенные в классе AggregationMethod.
stop_gradients Необязательно. Tensor или список тензоров, через которые не нужно дифференцировать.
unconnected_gradients Необязательно. Указывает значение градиента, возвращаемое, когда заданные тензоры ввода не соединены. Допустимые значения — константы, определенные в классе tf.UnconnectedGradients, и значение по умолчанию — none.
Возвращает
Список Tensor длиной len(xs), где каждый тензор — sum(dy/dx) для y в ys и для x в xs.
Возбуждает
LookupError если у одной из операций между x и y нет зарегистрированной функции градиента.
ValueError если аргументы некорректны.
RuntimeError если вызов происходит в режиме Eager.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/compat/v1/gradients

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API