美文网首页
2019-10-06 梯度下降法Python实践——求函数的最小

2019-10-06 梯度下降法Python实践——求函数的最小

作者: 小郑的学习笔记 | 来源:发表于2019-10-06 15:15 被阅读0次

    代码还是有很多地方需要完善的,需要近一步的学习

    import math
    
    #使用梯度下降法求函数的最小值
    # f = exp(X^2+(y-2)^2)   初始点为(1,1)
    
    
    
    #设计函数
    
    def function_one(x_input,y_input):   # 函数的输入 x,y
        f = math.exp(x_input**2 + (y_input-2)**2)  # 算出f 的值
        dx = 2*x_input*f                           # 算出 一阶x导数的值
        dy = 2*(y_input-2)*f                       # 算出 一阶y导数的值
        
        return f, dx, dy                           # 返回三个值
    
    def main():
        x = 1 #初始点
        y = 1 #初始点
        
        a = 0.05  # 设置步长
        
        error = 0.000001  # 设置误差函数
        
        f_old, dx, dy = function_one(x,y) # 算出初始的值
        
        for i in range(100):    # 开始循环 梯度下降 设置循环的次数
            x -= a*dx
            y -= a*dy
            f_result, dx, dy = function_one(x,y)  # 获得第一次计算的初始值
            
            if abs(f_result - f_old) < error:       # 下降的结果绝对值与误差进行比较 如果再允许范围内则终止
                f_final = f_result
                print("最小值为: %.5f, 循环次数: %d, 误差:%8f" % (f_final, i , abs(f_result - f_old)))
                break
            print("第 %d 次循环, 函数值为 %f" % (i, f_result))
            f_old = f_result
            
            
    if __name__ == '__main__':
        main()
    

    结果如下:

    结果

    相关文章

      网友评论

          本文标题:2019-10-06 梯度下降法Python实践——求函数的最小

          本文链接:https://www.haomeiwen.com/subject/fysupctx.html