我有一个接受多变量参数 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
还要确保使用 autograd 自带的 numpy libaray
import autograd.numpy as np
代替
import numpy as np
为了使用所有 numpy 函数。
我是一名优秀的程序员,十分优秀!