Как использовать автоград, чтобы найти точку MIN/MAX

Скажем, у нас есть простая функция y=sin(x**2), как мне использовать autograd для поиска всех X:s со значением производной первого порядка, равным 0?


person Liu Yong    schedule 10.04.2019    source источник


Ответы (1)


Ниже код может найти точку, где первая производная равна нулю. Однако, в зависимости от случайной инициализации, он найдет только одну точку. Если вы хотите найти все точки, вы можете попробовать перебрать множество случайных инициализаций на какой-то нужной сетке.

import torch 
import numpy as np
# initialization
x = torch.tensor(np.random.rand(1)).requires_grad_(True)

while (x.grad is None or torch.abs(x.grad)>0.01):
    if (x.grad is not None):
        # zero grads
        x.grad.data.zero_()
    # compute fn
    y = torch.sin(x**2)
    # compute grads
    y.backward()
    # move in direction of / opposite to grads
    x.data = x.data - 0.01*x.grad.data
    # use below line to move uphill 
    # x.data = x.data + 0.01*x.grad.data

print(x)
print(y)
print(x.grad)

Также см. как применять градиенты вручную в pytorch

person Umang Gupta    schedule 10.04.2019