【发布时间】:2021-07-12 02:31:20
【问题描述】:
我一直在尝试实现一个函数,该函数可以使用 GradientTape 输出函数的 n 阶微分。例如:
如果函数是 y = x^2 * sin(x) and x=7 and n=8.
那么一阶微分是dy/dx,二阶微分是d2y/dx2。该函数将返回 dny/dnx.
我尝试在下面实现一些东西,但没有成功,因为tf.GradientTape() 需要跟踪需要微分的方程。
def function(x):
return (x**2) * tf.math.sin(x)
def gradient_by_order(function,x,n):
with tf.GradientTape() as tape:
y = function(x)
d = tape.gradient(y,x)
with tf.GradientTape() as tape:
for i in range(n):
d = tape.gradient(d,x)
x = tf.Variable(initial_value=5.)
gradient_by_order(function,x,10)
有没有办法使用递归或循环或任何其他方法来创建工作函数? 非常感谢:)。
编辑:我知道您可以通过嵌套with tf.GradientTape() as tape 来获得第 n 阶导数,就像下面 Susmit Agrawal 的回答中所呈现的那样。我只是想知道是否有一种方法可以编写一个可以输出 n 阶导数的函数(假设存在这样的导数),因为我找不到。
【问题讨论】:
标签: python-3.x algorithm recursion tensorflow2.0 calculus