Spec-Zone.ru › TensorFlow

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 мы подставляем тензор из единиц той же формы, что и 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/api_docs/python/tf/compat/v1/gradients

Spec-Zone.ru

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