就我而言,有两种创建自定义操作的方法,如下所示:
@tf.RegisterGradient("CustomGrad")
def _custom_grad(op, grad):
return grad
和
@function.Defun(tf.float32, tf.float32)
def bprop(op, grad):
return grad
@function.Defun(tf.float32, grad_func=bprop)
def fprop(W):
W = tf.sign(W)
return W
在我看来,无论前向道具的哪种类型的计算,自定义梯度op的grad
参数始终是1的矩阵。我觉得它有点意义,因为你可以使用自定义渐变操作来让渐变通过。但是,我需要确认。
有人可以确认还是更正?
答案 0 :(得分:0)
grad
是使用自定义渐变后,图表中下一个实例的输入渐变。它不会受到你的前锋传球的影响。如果您更改操作后发生的事情grad
可能会发生变化。