tf.gradients
| Просмотреть исходный код на GitHub |
Строит символические производные суммы ys по x в xs.
tf.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.
grad_ys - это список тензоров той же длины, что и ys , содержащий начальные градиенты для каждого y в ys. Когда grad_ys равно None, мы заполняем тензор '1' с формой y для каждого y в ys. Пользователь может предоставить собственные начальные 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], unnconnected_gradients='none') sess.run(g1) # [None] g2 = tf.gradients([b], [a], unconnected_gradients='zero') sess.run(g2) # [array([[0., 0.]], dtype=float32)]
| Аргументы | |
|---|---|
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. |
| Возвращаемое значение | |
|---|---|
Список sum(dy/dx) для каждого 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/r1.15/api_docs/python/tf/gradients