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条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 已结题 10月4日
      • 创建了问题 9月27日

      悬赏问题

      • ¥30 用Rsync出现报错
      • ¥15 Java建模,处理文件和对象
      • ¥15 linux磁盘怎样重新挂载到原挂载路径下
      • ¥15 Java的类和静态方法
      • ¥15 存在一定规律的数据转置和整理
      • ¥15 关于flowable工作流开发的一个问题
      • ¥20 VBA如何用代码在onedrive创建文件夹?
      • ¥15 多理发师睡眠问题,2个理发师,n个座椅
      • ¥15 FPGA两按键控制led灯程序
      • ¥40 大学的python问题,用python解决