Hey, all. I’m in the process of getting familiar with TF’s autograph — the series of posts by @pgaleone were super helpful.
If I want to compute and return gradients inside the graph definition using the tf.function
decorator, is using tf.GradientTape
a sensible approach for TF 2? This is what I have so far for the simple graph illustrated below:
@tf.function def create_graph(x, y, get_grads): with tf.GradientTape(persistent=True) as tape: c = x + y d = y + 1 e = c * d if get_grads == False: return [e, {}] else: de_da = tape.gradient(e, x) de_db = tape.gradient(e, y) de_dc = tape.gradient(e, c) de_dd = tape.gradient(e, d) de_de = tape.gradient(e, e) return [e,{'d_da':de_da, 'd_db':de_db, 'd_dc':de_dc, 'd_dd':de_dd, 'd_de':de_de}] graph = tf.function(create_graph)