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

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 我需要在PC端 开两个抖店工作台客户端.(语言-java)
    • ¥15 有没有哪位厉害的人可以用C#可视化呀
    • ¥15 可以帮我看看代码哪里错了吗
    • ¥15 设计一个成绩管理系统
    • ¥15 PCL注册的选点等函数如何取消注册
    • ¥15 问一下各位,为什么我用蓝牙直接发送模拟输入的数据,接收端显示乱码呢,米思齐软件上usb串口显示正常的字符串呢?
    • ¥15 Python爬虫程序
    • ¥15 crypto 这种的应该怎么找flag?
    • ¥15 代码已写好,求帮我指出错误,有偿!
    • ¥15 matlab+波形匹配算法