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