Градиенты, полученные с помощью tf.gradients () или optimizer.compute_gradients (), уже отменены? - PullRequest
2 голосов
/ 17 мая 2019

Градиенты, полученные с помощью tf.gradients () или optimizer.compute_gradients (), уже отменены?

Например, для градиентного спуска мы знаем, что направление должно быть установлено равным отрицательному градиенту, -E '(W), где E' (W) - градиент, E (W) - потеря.

И в Tensorflow с помощью tf.gradients () или tf.train.GradientDescentOptimizer.compute_gradients () мы можем получить градиенты. Но установлены ли полученные градиенты уже отрицательными?

Если мы хотели бы сделать некоторые вычисления для градиентов, я думаю, что для нас будет важно знать, были ли градиенты отменены или нет.

1 Ответ

0 голосов
/ 17 мая 2019

Нет, градиенты не отменяются, они следуют правильному определению градиента.Вот пример TF 2.0 (с использованием градиентной ленты):

x = tf.constant(2.)
with tf.GradientTape() as tape:
    tape.watch(x)
    y = x**2
print(tape.gradient(y, x))

Это напечатает tf.Tensor(4.0, shape=(), dtype=float32) (т.е. 2 * x), которое, как мы видим, не отменяется.

В TF 1.X, tf.gradients дает тот же результат.optimizer.compute_gradients просто использует эту функцию, поэтому еще раз она даст тот же результат.

Отрицание должно быть обработано пользователем, т. Е. Если вы хотите реализовать градиентный спуск самостоятельно, вам нужно будет вычесть градиенты от переменных, чтобы минимизировать потери.В классах Optimizer это включено в шаг apply_gradients (т. Е. Здесь применяются отрицательные градиенты).

...