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 算法 排序实现快速排序
Jun 05 Python
Python实现从百度API获取天气的方法
Mar 11 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
PyQt5每天必学之关闭窗口
Apr 19 Python
pandas如何处理缺失值
Jul 31 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
python带参数打包exe及调用方式
Dec 21 Python
500行python代码实现飞机大战
Apr 24 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
python推导式的使用方法实例
Feb 28 Python
用Python实现Newton插值法
Apr 17 Python
Python如何识别银行卡卡号?
Jun 10 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
javascript 特殊字符串
2009/02/25 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
python实现文件的分割与合并
2019/08/29 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
python字符串判断密码强弱
2020/03/18 Python
python logging.info在终端没输出的解决
2020/05/12 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
期末总结的个人自我评价
2013/11/02 职场文书
高中体育教学反思
2014/01/29 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书