Как использовать автограда найти точку MIN / MAX - PullRequest
1 голос
/ 10 апреля 2019

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

1 Ответ

0 голосов
/ 10 апреля 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...