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. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/compat/v1/gradients