我有一个函数,它接受一个多元参数x。这里 x = [x1,x2,x3]。假设我的函数如下所示: f(x,T( = np.dot(x,T( + np.exp(np.dot(x,T( 其中 T 是一个常量。
我有兴趣查找 df/dx1、df/dx2 和 df/dx3 函数。
我在使用 scipy diff 取得了一些成功,但我有点怀疑,因为它使用了数字差异。昨天,我的同事向我推荐了Autograd(github(。由于它似乎是一个流行的软件包,我希望这里有人知道如何使用此软件包获得部分差异化。我使用此库的初始测试表明,grad 函数仅对第一个参数进行微分。我不确定如何将其扩展到其他参数。任何帮助将不胜感激。
谢谢。
我在 autograd 源代码中找到了以下对 grad 函数的描述:
def grad(fun, x)
"Returns a function which computes the gradient of `fun` with
respect to positional argument number `argnum`. The returned
function takes the same arguments as `fun`, but returns the
gradient instead. The function `fun`should be scalar-valued. The
gradient has the same type as the argument."
所以
def h(x,t):
return np.dot(x,t) + np.exp(np.dot(x,t))
h_x = grad(h,0) # derivative with respect to x
h_t = grad(h,1) # derivative with respect to t
还要确保使用自动grad附带的numpy libaray
import autograd.numpy as np
而不是
import numpy as np
为了利用所有 Numpy 函数。