higher-order derivatives 高阶导数
import tensorflow as tf
'''
使用tf.GradientTape()记录梯度,含有两个参数,默认persistent = False, watch_accessed_variables = True,
persistent = False的话那么梯度就只能计算一次,因为计算一次后梯度就会被释放掉,如果像计算多次,那么一定要使persistent为True。
watch_accessed_varibles = True的话就可以看到所有变量(x = tf.Variable(3.0),这样定义的),相当于watch了所有变量,如果设置为False的话那么要求那个变量的导师就需要watch哪个变量
但是在一般情况下为了保证能找到梯度,要求那个变量的梯度就一定要watch它,不管他是constant还是Variable.
'''
#定义函数,对哪个变量求导就watch()哪一个变量
x = tf.constant(3.0) #注意求导的一定是float类型,不能是int类型
with tf.GradientTape(persistent = True) as g:
g.watch(x)
y = x ** 2
z = x ** 2
dy_dx = g.gradient(y, x)
dz_dx = g.gradient(z, x)
print(dy_dx, dz_dx)