如何解决Tensorflow自定义渐变不会反向传播
我试图用tf.custom_gradient
来理解张量流中的自定义梯度,所以我试图用其梯度重现一个简单的矩阵乘法,其中我只对权重矩阵的梯度感兴趣。
@tf.custom_gradient
def matrixmul(x,weight):
res = tf.matmul(x,weight)
def grad(dy):
grad_x = None
grad_w = tf.matmul(x,dy,transpose_a=True)
return grad_x,grad_w
return res,grad
只要在反向传播中不使用我的自定义渐变,这都会提供正确的渐变,但是当我进行多次乘法运算时,渐变不会传播回去,因此我得到None
作为{{ 1}}。
例如:
grad_w1
with tf.GradientTape() as tape:
temp = matrixmul(x,w1)
pred = tf.matmul(temp,w2)
loss = tf.reduce_sum(tf.norm(pred - y,axis=-1))
grad_w1 = tape.gradient(loss,w1)
第一个片段给出正确的渐变,但是第二个片段产生with tf.GradientTape() as tape:
temp = tf.matmul(x,w1)
pred = matrixmul(temp,w1)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。