python - 如何使用 autograd 查找最小/最大点

标签 python pytorch autograd

假设我们有一个简单的函数 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)

另请参阅how to apply gradients manually in pytorch

关于python - 如何使用 autograd 查找最小/最大点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55604691/

相关文章:

numpy - 如何将 Pytorch autograd.Variable 转换为 Numpy?

pytorch - .grad() 在 pytorch 中返回 None

python - 当使用 .clamp 而不是 torch.relu 时,Pytorch Autograd 会给出不同的渐变

python - 使用 autograd.grad() 作为损失函数的参数(pytorch)

函数中的 Python 错误 [初学者]

python - 使用 Python 管理多平台视频流的最佳方式是什么?

python - 在pytorch中使用前馈网络构建循环神经网络

pytorch - 运行时错误: "exp" not implemented for 'torch.LongTensor'

python - 在 EntityRuler 中将 RegEx 用于短语模式

python - 带套接字的简单 Python 聊天应用程序