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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
Python拼接微信好友头像大图的实现方法
Aug 01 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
Python实现微信翻译机器人的方法
Aug 13 Python
python yield关键词案例测试
Oct 15 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
python 异步async库的使用说明
May 04 Python
python如何设置静态变量
Sep 07 Python
尝试使用Python爬取城市租房信息
Apr 12 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
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Python学习笔记之常用函数及说明
2014/05/23 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
学习Python列表的基础知识汇总
2020/03/10 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
adidas美国官网:adidas US
2016/09/21 全球购物
德购商城:德国进口直邮商城
2017/06/13 全球购物
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
电大物流学生的自我评价
2013/10/25 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
教师考察材料范文
2014/06/03 职场文书
文明倡议书
2015/01/19 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
python运行脚本文件的三种方法实例
2022/06/25 Python
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL