• 梯度


    函数 f ,输入的是一个 n 维向量 x = [x1,x2,...,xn]T,输出是一个标量。

    函数 f 关于 x 的梯度就是一个 n 个偏导数组成的向量:

    例如:

    其中 x = [x1,x2,x3,x4]T,那么 y = 2(x1*x1+x2*x2+x3*x3+x4*x4);

    关于 x 的偏导数求得 [4x1,4x2,4x3,4x4]T,即 4X

    backward()自动求梯度

    # coding: utf-8
    
    # In[2]:
    
    
    from mxnet import autograd,nd
    
    
    # In[3]:
    
    
    x = nd.arange(4).reshape((4,1))
    x
    
    
    # In[4]:
    
    
    x.attach_grad()
    
    
    # In[5]:
    
    
    with autograd.record():
        y = 2 * nd.dot(x.T,x)
    
    
    # In[7]:
    
    
    y.backward()
    
    
    # In[8]:
    
    
    assert (x.grad - 4*x).norm().asscalar() == 0
    x.grad
    
    
    # In[12]:
    
    
    x.grad
    View Code
    # In[13]:
    
    
    def f(a):
        b = a*2
        while b.norm().asscalar()<1000:
            b = b*2
        if b.sum().asscalar()>0:
            c = b
        else:
            c = 100 * b
        return c
    
    
    # In[15]:
    
    
    a = nd.random.normal(shape=1)
    a
    
    
    # In[16]:
    
    
    a.attach_grad()
    
    
    # In[18]:
    
    
    with autograd.record():
        c = f(a)
    c.backward()
    
    
    # In[19]:
    
    
    a.grad
    
    
    # In[20]:
    
    
    a.grad == c/a

    分析:根据函数可知,进去一个a,出来一定是 x * a 的形式,对a 求偏导,得x。

    则 a.grad == c / a

  • 相关阅读:
    operator[],识别读操作和写操作
    COW写时复制
    嵌套类,PIMPL
    类型转换
    String类运算符重载,自己实现
    socket的几个配置函数
    TCP三次握手,四次挥手,状态变迁图
    运算符重载
    友元
    P4016 负载平衡问题(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/TreeDream/p/9994040.html
Copyright © 2020-2023  润新知