qq_40400165 2022-09-27 13:35 采纳率: 0%
浏览 56
已结题

tensorflow2的GradientTape自动求导存在误差

今天在用tensorflow2编程的时候发现一个问题,就是tensorflow2的GradientTape自动求导存在误差,有人知道是怎么一回事吗?详细情况如下:
我定义了一个1×2矩阵K和2×1矩阵z的乘积,然后用tensorflow去求输出结果对K矩阵2个元素的导数,结果应该是z矩阵的数值,但是出来的结果不对,如果手动将两个矩阵的元素分别相乘再相加,结果又是对的了。
同样的,利用keras.layers.Dense做相同的计算(不要bias和激活函数),用这一层网络输出结果对输入求导同样存在误差(导数应该是该层网络的权重)。具体计算结果如下,计算结果图中见红框内对比,按理说z应该与G和N相等,wt应该与vg相等,为什么存在这样的误差?:

import tensorflow as tf
from tensorflow.keras.layers import Dense
K = tf.Variable(tf.random.normal([1,2]))
z = tf.random.normal([2,1])
d = Dense(1)
with tf.GradientTape(persistent=True) as tape:
    n = tf.squeeze(tf.matmul(K,z))
    o = d(K)
    wt = d.weights
    m = K[0,0]*z[0,0]+K[0,1]*z[1,0]
    G = tape.gradient(n, K)
    N = tape.gradient(m, K)
    wg = tape.gradient(o, d.trainable_variables)
    vg = tape.gradient(o, K)

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-27 14:10
    关注
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月4日
  • 创建了问题 9月27日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器