前言

简单介绍下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中几种自动微分库解析

本文地址: http://www.cppcns.com/jiaoben/python/270832.html

python求偏导_python中几种自动微分库解析相关推荐

  1. python求偏导_python实现点位精度评定

    点位精度评定,主要是评定点位数据得l离散度.评定主要是一系列得数学值.在python的numpy中有一些列的函数可以用来实现这一系列的评估值. 1.期望 期望表示一点点位最可能出现的位置.一般情况下期 ...

  2. python求偏导函数_Python中多元函数的向量化偏导数

    在 this thread中,alko发布了一个用于计算多元函数的偏导数的非凡答案. 我现在有一个关于增强此函数以接受输入值数组的后续问题.我有一些代码,我循环遍历一大堆n维点,计算每个变量的偏导数, ...

  3. python图表制作方法_Python中一种简单的动态图表制作方法

    在读技术博客的过程中,我们会发现那些能够把知识.成果讲透的博主很多都会做动态图表.他们的图是怎么做的?难度大吗?这篇文章就介绍了Python中一种简单的动态图表制作方法. 数据暴增的年代,数据科学家. ...

  4. 使用python处理wps表格_python中常⽤的excel模块库

    python中常用的excel模块库&安装方法 openpyxlopenpyxl是⼀个Python库,用于读取/写⼊Excel 2010 xlsx / xlsm / xltx / xltm⽂件 ...

  5. python求乘积内建函数_Python中的内建函数(Built_in Funtions)

    前言 在Python官方文档的标准库章节中,第一节是简介,第二节就是Built_in Functions,可见内建函数是Python标准库的重要组成部分,而有很多内建函数我们平时却很少用到或根本就不知 ...

  6. python求导函数公式_python怎么实现函数求导

    python实现函数求导的方法是:1.利用sympy库中的symbols方法传入x和y变量:2.利用sympy库中的diff函数传入需要求导的函数即可返回求导之后的结果. python利用sympy库 ...

  7. 用Python对数学函数进行求值、求偏导

    from sympy import *# x = Symbol("x") # y = diff(x**3+x, x) # print(y) # result = y.subs('x ...

  8. 【李代数求偏导】SLAM中李代数SE3求偏导左扰动模型和右扰动模型的区别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 结论 1.左扰动模型: 2.右扰动模型: 2.1右扰动+右乘更新 2.2右扰动+左乘更新 3.将T展开后求偏导(具体看 ...

  9. python中用sympy对变量求偏导

    用sympy 求偏导 import numpy as np import pandas as pd import sympy as sytheta, n, k = sy.symbols('theta, ...

  10. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

最新文章

  1. Science首发奥密克戎突刺蛋白分子水平分析,揭秘2大传染性增强原因,柳叶刀:全球大流行有望3月结束...
  2. React学习笔记3:React脚手架
  3. leetcode51 N皇后
  4. scanf函数和printf函数
  5. 记一次ArrayList产生的线上OOM问题
  6. 调色师必须了解的LUT知识
  7. Minor GC和Major GC
  8. hiho 第1周 最长回文子串
  9. layer —— 一个简单的jQuery弹出层插件
  10. 单片机c语言表达式,单片机C语言教程-运算符和表达式
  11. ExcelJS 将JSON数组转换成为Excel文件 / JSON转换成为XLSX / 网页导出Excel表格
  12. aida64怎么测试cpu稳定性_如何对超频内存和CPU进行稳定性测试(图文详细版α1.55*)...
  13. 计算机机房实训计划,计算机专业实习计划安排.docx
  14. java会员卡的绑定和解绑_java毕业设计_springboot框架的健身房会员卡管理
  15. 实践篇·让你的图片特别起来—自定义像素化
  16. python 笔记:打开nii格式(nibabel 库)
  17. 关于英语学习的听力训练
  18. 我们要看到怎样的未来?
  19. java入我心_JVM(一):久识你名,初居我心
  20. Mybatis快速入门(个人学习笔记)

热门文章

  1. 24核超级计算机,24核装备 Intel发布最强14nm至强处理器
  2. 质量码——工业互联网平台入口
  3. 字符串str.format()方法
  4. IOS微信内置浏览器音频加载问题
  5. Linux中action命令
  6. python解析HL7协议多方式对比
  7. 如何配置 Cilium 和 BGP 协同工作?
  8. Android 12 WiFi 架构
  9. 天龙微信游戏找服务器,《天龙八部3》微信公众号积分系统维护公告
  10. 三、Reminders 读写