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