Частная производная с использованием 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 принимает дифференцирование только по первому аргументу. Я не уверен, как распространить это на другие аргументы. Любая помощь будет принята с благодарностью.

Спасибо.


person user3259937    schedule 09.08.2017    source источник


Ответы (1)


Я нашел следующее описание функции grad в исходном коде autograd:

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."

So

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

Также обязательно используйте numpy libaray, который поставляется с autograd.

import autograd.numpy as np

вместо

import numpy as np

чтобы использовать все функции numpy.

person benno    schedule 22.03.2018
comment
Но как вызвать функцию частной производной, чтобы получить конкретное значение? - person Junning Huang; 27.01.2021