zoukankan      html  css  js  c++  java
  • 梯度

    函数 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

  • 相关阅读:
    第十周阅读内容
    第十周学习小结
    第九周阅读内容
    第九周学习小结
    第八周学习小结
    ..总结
    .总结
    总结.
    周总结
    总结
  • 原文地址:https://www.cnblogs.com/TreeDream/p/9994040.html
Copyright © 2011-2022 走看看