From 31eb0e012e0e76a2a9bf2ea1ef45cf34f29aa4db Mon Sep 17 00:00:00 2001 From: HarikrishnanBalagopal Date: Thu, 8 Aug 2019 23:10:40 +0530 Subject: [PATCH] Changed example showing gradient processing The original example was processing the gradients twice. 1st: grads_and_vars = zip(processed_grads, var_list) 2nd: capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars] The 2nd line is especially weird because it unnecessarily zips the gradients with the var_list even though it is only processing the gradient part. Refactored the example to be clearer, now there is only a single line that processes the gradients. --- tensorflow/python/keras/optimizer_v2/optimizer_v2.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tensorflow/python/keras/optimizer_v2/optimizer_v2.py b/tensorflow/python/keras/optimizer_v2/optimizer_v2.py index 06d5a20c43a..3d5e48006ad 100644 --- a/tensorflow/python/keras/optimizer_v2/optimizer_v2.py +++ b/tensorflow/python/keras/optimizer_v2/optimizer_v2.py @@ -138,15 +138,13 @@ class OptimizerV2(trackable.Trackable): loss = vars = grads = tape.gradient(loss, vars) + + # Do whatever you need to the gradients, for example cap them, etc. + # capped_grads = [MyCapper(g) for g in grads] processed_grads = [process_gradient(g) for g in grads] - grads_and_vars = zip(processed_grads, var_list) - # grads_and_vars is a list of tuples (gradient, variable). Do whatever you - # need to the 'gradient' part, for example cap them, etc. - capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars] - - # Ask the optimizer to apply the capped gradients. - opt.apply_gradients(capped_grads_and_vars) + # Ask the optimizer to apply the processed gradients. + opt.apply_gradients(zip(processed_grads, var_list)) ``` ### Use with `tf.distribute.Strategy`.