tensorflow 实现自定义梯度反向传播代码
以sign函数为例:
sign函数可以对数值进行二值化,但在梯度反向传播是不好处理,一般采用一个近似函数的梯度作为代替,如上图的Htanh。在[-1,1]直接梯度为1,其他为0。
#使用修饰器,建立梯度反向传播函数。其中op.input包含输入值、输出值,grad包含上层传来的梯度 @tf.RegisterGradient("QuantizeGrad") defsign_grad(op,grad): input=op.inputs[0] cond=(input>=-1)&(input<=1) zeros=tf.zeros_like(grad) returntf.where(cond,grad,zeros) #使用with上下文管理器覆盖原始的sign梯度函数 defbinary(input): x=input withtf.get_default_graph().gradient_override_map({"Sign":'QuantizeGrad'}): x=tf.sign(x) returnx #使用 x=binary(x)
以上这篇tensorflow实现自定义梯度反向传播代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。