# #############添加############## def binarize(self, x): """ Clip and binarize tensor using the straight through estimator (STE) for the gradient. """ g = tf.get_default_graph() with ops.name_scope("Binarized") as name: # x=tf.clip_by_value(x,-1,1) ###当网络正向传播时,返回的是tf.sign(x),当反向求梯度时,用Identity代替了Sign函数,Identity一般可以认为等于。即直接用x来求梯度。 with g.gradient_override_map({"Cast": "Identity"}): return tf.sign(x)#############结束##############
正如我在代码中注释的一样,gradient_override_map函数主要用于解决使用自己定义的函数方式来求梯度的问题,特别是在深度学习的二值化,无法对符号函数进行求导,需要使用straight through estimator (STE)求导。 gradient_override_map函数的参数值为一个字典。其表示的意思是:字典中value表示使用该值表示的函数代替key表示的函数进行梯度运算。例如例子中,在求梯度时,使用tf.identity函数代替tf.sign函数。即使用identity处理后的值来求梯度。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对于tensorflow中的gradient_override_map函数的理解 - Python技术站