python中几种自动微分库解析


Posted in Python onAugust 29, 2019

前言

简单介绍下python的几个自动求导工具,tangent、autograd、sympy;

在各种机器学习、深度学习框架中都包含了自动微分,微分主要有这么四种:手动微分法、数值微分法、符号微分法、自动微分法,这里分别简单走马观花(hello world式)的介绍下下面几种微分框架;

sympy 强大的科学计算库,使用的是符号微分,通过生成符号表达式进行求导;求得的导数不一定为最简的,当函数较为复杂时所生成的表达式树异常复杂;

autograd自动微分先将符号微分用于基本的算子,带入数值并保存中间结果,后应用于整个函数;自动微分本质上就是图计算,容易做很多优化所以广泛应用于各种机器学习深度学习框架中;

tangent 为源到源(source-to-source)的自动微分框架,在计算函数f微分时他通过生成新函数f_grad来计算该函数的微分,与目前所存在的所有自动微分框架都有所不同;由于它是通过生成全新的函数来计算微分所以具有非常搞的可读性、可调式性这也是官方所说的与当前自动微分框架的重大不同;

sympy 求导

def grad():
   # 定义表达式的变量名称
   x, y = symbols('x y')
   # 定义表达式
   z = x**2 +y**2
   # 计算z关于y对应的偏导数
   return diff(z, y)
 func = grad()

输出结果表达式z的导函数z‘=2*y

print(func)

把y 等于6 带入计算 结果 为12

print(func.evalf(subs ={'y':3}))

Autograd求偏导

import autograd.numpy as np
 from autograd import grad
 #表达式 f(x,y)=x^2+3xy+y^2
 #df/dx = 2x+3y
 #df/dy = 3x+2y
 #x=1,y=2
 #df/dx=8
 #df/dy=7
 def fun(x, y):
  z=x**2+3*x*y+y**2
  return z
 fun_grad = grad(fun)
 fun_grad(2.,1.)

输出:7.0

tangent求导

import tangent
 def fun(x, y):
  z=x**2+3*x*y+y**2
  return z

默认为求z关于x的偏导数

dy_dx = tangent.grad(fun)

输出偏导数值为 8 ,z' = 2 * x,此处x传任何值都是一样的

df(4, y=1)

可通过使用wrt参数指定求关于某个参数的偏导数,下面为求z关于y的偏导数

df = tangent.grad(funs, wrt=([1]))

输出值为10 ,z' = 2 *y,此处x传任何值都是一样的

df(x=0, y=5)

上面说了那么多也没体现出tangent的核心:源到源(source-to-source)

在生成导函数的时候加入verbose=1参数,即可看到tangent为我们生成的用于计算导数的函数,默认情况下该值为0所以我们没感觉到tangent的求导与别的自动微分框架有什么区别;

def df(x):
   z = x**2
   return z
 df = tangent.grad(df, verbose=1)
 df(x=2)

在执行完上述代码后,我们看到了tangent为我们所生成用于求导数的函数:

def ddfdx(x, bz=1.0):
  z = x ** 2
  assert tangent.shapes_match(z, bz), 'Shape mismatch between return value (%s) and seed derivative (%s)' % (numpy.shape(z), numpy.shape(bz))
 # Grad of: z = x ** 2
 _bx = 2 * x * bz
 bx = _bx
 return bx

ddfdx函数就是所生成的函数,从中我们也可以看到表达式z的导函数z'=2 * x,tangent就是通过执行该函数用于求得导数的;

sympy 中的自动微分只是它强大的功能之一,autograd 从名字也可知它就是为了自动微分而生的,tangent初出茅庐2017年底Google才发布的自动微分方法也比较新颖,从17年发v0.1.8版本后也没见发版,源码更新也不够活跃;sympy、autograd比较成熟,tangent还有待观察;

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

Python 相关文章推荐
python 数据加密代码
Dec 24 Python
举例详解Python中循环语句的嵌套使用
May 14 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
python绘制多个曲线的折线图
Mar 23 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
python通过移动端访问查看电脑界面
Jan 06 Python
python同时遍历两个list用法说明
May 02 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 Python
详解python字符串驻留技术
May 21 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 Python
详解python中index()、find()方法
Aug 29 #Python
python同步两个文件夹下的内容
Aug 29 #Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 #Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 #Python
python rsync服务器之间文件夹同步脚本
Aug 29 #Python
python-tornado的接口用swagger进行包装的实例
Aug 29 #Python
Python csv模块使用方法代码实例
Aug 29 #Python
You might like
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
php 解压rar文件及zip文件的方法
2014/05/05 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
javascript 写类方式之七
2009/07/05 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
js jquery数组介绍
2012/07/15 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
采用call方式实现js继承
2014/05/20 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
JavaScript实现全选取消效果
2017/12/14 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
python反转列表的三种方式解析
2019/11/08 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
数控技术应届生求职信
2013/11/13 职场文书
公证书标准格式
2014/04/10 职场文书
村级换届选举方案
2014/05/10 职场文书
家庭贫困证明
2014/09/23 职场文书
高中学生自我评价范文
2014/09/23 职场文书
退税申请报告怎么写
2015/05/18 职场文书
朋友离别感言
2015/08/04 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript