使用Autograd的部分导数

时间:2017-08-09 19:52:49

标签: python python-2.7 differentiation automatic-differentiation autograd

我有一个接受多变量参数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函数只对第一个参数进行区分。我不知道如何将其扩展到其他参数。任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:3)

我在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函数。