Отсутствует градиент при использовании tf.function - PullRequest
0 голосов
/ 06 августа 2020

Я обнаружил, что если я хочу использовать tf.gradients в тензорном потоке 2, а не в градиентной ленте, я могу сделать это, заключив код в функцию, украшенную tf.function. Но почему-то я не могу взять градиент по отношению к переменной таким образом:

import tensorflow as tf
a = tf.Variable(initial_value=1.0, dtype=tf.float32)
b = 0.01 * a

@tf.function
def get_grads():
  return tf.gradients(b, a)[0]

print(get_grads())

Я ожидал бы получить в результате какой-то тензор, тензор, который должен оцениваться как 0,01. Но вместо этого я получаю None. Обратите внимание, что я использую это в Google Colab, поэтому проблем с версией или установкой tenorflow быть не должно.

Что я делаю не так?

1 Ответ

1 голос
/ 06 августа 2020

Операция b = 0.01 * a находится вне графика, созданного функцией tf.function -декорированной.

вы можете использовать:

a = tf.Variable(initial_value=1.0, dtype=tf.float32)
@tf.function
def get_grads():
  
   b = 0.01 * a
   return tf.gradients(b, a)

print(get_grads())
...