假设我们有一个简单的函数 y=sin(x**2),如何使用 autograd 查找一阶导数值为 0 的所有 X:s?
下面的代码可以找到一阶导数为零的点。然而,根据随机初始化,它只能找到一个点。如果您想找到所有点,您可以尝试在某些所需的网格上迭代大量随机初始化。
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中手动应用渐变 https://stackoverflow.com/questions/49154514/how-to-apply-gradients-manually-in-pytorch
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)