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中map,reduce,filter和sorted函数的使用方法
Aug 17 Python
python实现log日志的示例代码
Apr 28 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 Python
python2.7和NLTK安装详细教程
Sep 19 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
FFrpc python客户端lib使用解析
Aug 24 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
Python实现简单的2048小游戏
Mar 01 Python
python热力图实现的完整实例
Jun 25 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
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
bootstrap Table的一些小操作
2017/11/01 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
Python break语句详解
2014/03/11 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
python基础 range的用法解析
2019/08/23 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
python 读取.nii格式图像实例
2020/07/01 Python
导致python中import错误的原因是什么
2020/07/01 Python
Python将字典转换为XML的方法
2020/08/01 Python
Python列表推导式实现代码实例
2020/09/09 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
社区文化建设方案
2014/05/02 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
杨善洲电影观后感
2015/06/04 职场文书
《称赞》教学反思
2016/02/17 职场文书