zoukankan      html  css  js  c++  java
  • 多维梯度下降

    多维函数梯度(偏导数组成)

    方向导数:

    迭代方程:

    import math
    import matplotlib
    import numpy as np
    import gluonbook as gb
    from mxnet import nd,autograd,init,gluon
    
    eta = 0.1
    def f_2d(x1,x2):
        return x1**2 + 2*x2**2
    
    def gd_2d(x1,x2,s1,s2):
        return (x1 - eta*2*x1,x2-eta*4*x2,0,0)
    
    def train_2d(trainer):
        x1, x2, s1, s2 = -5, -2, 0, 0
        results = [(x1,x2)]
        for i in range(20):
            x1, x2, s1, s2 = trainer(x1,x2,s1,s2)
            results.append((x1,x2))
        return results
    
    def show_trace_2d(f,results):
        gb.plt.plot(*zip(*results),'-o',color='#ff7f0e')
        x1,x2 = np.meshgrid(np.arange(-5.5,1.0,0.1),np.arange(-3.0,1.0,0.1))
        gb.plt.contour(x1,x2,f(x1,x2),colors='#1f77b4')
        gb.plt.xlabel('x1')
        gb.plt.ylabel('x2')
    
    show_trace_2d(f_2d,train_2d(gd_2d))

    发现,最优值取值在x1=0,x2=0 附近

  • 相关阅读:
    日志
    JAVA字符串类
    JAVA包
    JAVA面向对象
    JAVA数组
    JAVA循环结构
    JAVA程序调试
    JAVA条件判断
    JAVA算术运算符
    JAVA数据类型
  • 原文地址:https://www.cnblogs.com/TreeDream/p/10057700.html
Copyright © 2011-2022 走看看