我正在尝试理解tensorflow tf.gradientTape的一个API。
下面是我从官网得到的代码:
x = tf.constant(3.0)
with tf.GradientTape(persistent=True) as g:
g.watch(x)
y = x * x
z = y * y
dz_dx = g.gradient(z, x) # 108.0 (4*x^3 at x = 3)
dy_dx = g.gradient(y, x) # 6.0我想知道他们是如何获得dz_dx as 108和dy_dx as 6的?
我还做了另一个类似下面的测试:
x = tf.constant(3.0)
with tf.GradientTape(persistent=True) as g:
g.watch(x)
y = x * x * x
z = y * y
dz_dx = g.gradient(z, x) # 1458.0
dy_dx = g.gradient(y, x) # 6.0这一次dz_dx变成了1458,我完全不知道为什么。有没有专家能告诉我计算是怎么做的?
发布于 2019-10-04 11:06:11
在y=x*x中,我们可以使用dy/dx=2*x。在z=y*y中,我们有dz/dy=2*y。根据链式规则,dz/dx=(dz/dy)*(dy/dx)=(2*y)*(2*x)=(2*x*x)*(2*x)=108。dy/dx=2*x=6。你的第二个例子也有相同的推导。顺便说一下,在你的第二个例子中,dy/dx应该是27而不是6。
https://stackoverflow.com/questions/58228821
复制相似问题