【问题标题】:How to use autograd find MIN/MAX point如何使用 autograd 查找 MIN/MAX 点
【发布时间】:2019-08-31 10:45:32
【问题描述】:

假设我们有一个简单的函数 y=sin(x**2),我如何使用 autograd 找到所有一阶导数值为 0 的 X:s?

【问题讨论】:

    标签: python pytorch autograd


    【解决方案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)
    

    另见how to apply gradients manually in pytorch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多