python实现梯度法 python最速下降法


Posted in Python onMarch 24, 2020

假设我们已经知道梯度法——最速下降法的原理。

现给出一个算例:

python实现梯度法 python最速下降法

如果人工直接求解:

python实现梯度法 python最速下降法

python实现梯度法 python最速下降法

现给出Python求解过程:

import numpy as np
from sympy import *
import math
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist

# 定义符号
x1, x2, t = symbols('x1, x2, t')

def func():
 # 自定义一个函数
 return pow(x1, 2) + 2 * pow(x2, 2) - 2 * x1 * x2 - 2 * x2

def grad(data):
 # 求梯度向量,data=[data1, data2]
 f = func()
 grad_vec = [diff(f, x1), diff(f, x2)] # 求偏导数,梯度向量
 grad = []
 for item in grad_vec:
  grad.append(item.subs(x1, data[0]).subs(x2, data[1]))
 return grad

def grad_len(grad):
 # 梯度向量的模长
 vec_len = math.sqrt(pow(grad[0], 2) + pow(grad[1], 2))
 return vec_len

def zhudian(f):
 # 求得min(t)的驻点
 t_diff = diff(f)
 t_min = solve(t_diff)
 return t_min

def main(X0, theta):
 f = func()
 grad_vec = grad(X0)
 grad_length = grad_len(grad_vec) # 梯度向量的模长
 k = 0
 data_x = [0]
 data_y = [0]
 while grad_length > theta: # 迭代的终止条件
  k += 1
  p = -np.array(grad_vec)
  # 迭代
  X = np.array(X0) + t*p
  t_func = f.subs(x1, X[0]).subs(x2, X[1])
  t_min = zhudian(t_func)
  X0 = np.array(X0) + t_min*p
  grad_vec = grad(X0)
  grad_length = grad_len(grad_vec)
  print('grad_length', grad_length)
  print('坐标', X0[0], X0[1])
  data_x.append(X0[0])
  data_y.append(X0[1])

 print(k)

 # 绘图
 fig = plt.figure()
 ax = axisartist.Subplot(fig, 111)
 fig.add_axes(ax)
 ax.axis["bottom"].set_axisline_style("-|>", size=1.5)
 ax.axis["left"].set_axisline_style("->", size=1.5)
 ax.axis["top"].set_visible(False)
 ax.axis["right"].set_visible(False)
 plt.title(r'$Gradient \ method - steepest \ descent \ method$')
 plt.plot(data_x, data_y, label=r'$f(x_1,x_2)=x_1^2+2 \cdot x_2^2-2 \cdot x_1 \cdot x_2-2 \cdot x_2$')
 plt.legend()
 plt.scatter(1, 1, marker=(5, 1), c=5, s=1000)
 plt.grid()
 plt.xlabel(r'$x_1$', fontsize=20)
 plt.ylabel(r'$x_2$', fontsize=20)
 plt.show()

if __name__ == '__main__':
 # 给定初始迭代点和阈值
 main([0, 0], 0.00001)

最终结果图如下所示:

python实现梯度法 python最速下降法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
用Python实现协同过滤的教程
Apr 08 Python
Python的re模块正则表达式操作
May 25 Python
django实现前后台交互实例
Aug 07 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
ipython和python区别详解
Jun 26 Python
python自定义时钟类、定时任务类
Feb 22 Python
Python中函数的返回值示例浅析
Aug 28 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
python基础之文件操作
Oct 24 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 #Python
python实现梯度下降法
Mar 24 #Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 #Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 #Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 #Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 #Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 #Python
You might like
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python中Threading用法详解
2017/12/27 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
Python列表(List)知识点总结
2019/02/18 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
《恐龙》教学反思
2014/04/27 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
应届生求职信范文
2014/06/30 职场文书
施工安全责任书范本
2014/07/24 职场文书
作弊检讨书范文
2015/05/06 职场文书
盗窃案辩护词
2015/05/21 职场文书
2016年春节问候语
2015/11/11 职场文书
思想品德课教学反思
2016/02/24 职场文书