注意:本文相关基础知识不介绍。

给出代码:

from jax import jacfwd, jacrev
import jax.numpy as jnp
def hessian_1(f):
return jacfwd(jacrev(f)) def hessian_2(f):
return jacfwd(jacfwd(f)) def hessian_3(f):
return jacrev(jacfwd(f)) def hessian_4(f):
return jacrev(jacrev(f)) def f(x):
return (x ** 2).sum() print(hessian_1(f)(jnp.ones((100,))))
print(hessian_2(f)(jnp.ones((100,))))
print(hessian_3(f)(jnp.ones((100,))))
print(hessian_4(f)(jnp.ones((100,)))) import time a=time.time()
hessian_1(f)(jnp.ones((100,)))
b=time.time()
print(b-a) hessian_2(f)(jnp.ones((100,)))
c=time.time()
print(c-b) hessian_3(f)(jnp.ones((100,)))
d=time.time()
print(d-b) hessian_4(f)(jnp.ones((100,)))
e=time.time()
print(e-d)

运算结果:

结论(不一定正确):

两次求导均使用后向模式的要比两次求导均使用前向模式的要速度快,并且两次求导使用相同模式的要比两次求导分别使用不同模式的速度要快;

第一次求导使用后向模式,第二次求导使用前向模式,要比第一次求导使用前向模式,第二次求导使用反向模式的速度要快。

修改代码:

from jax import jacfwd, jacrev
import jax.numpy as jnp
from jax import jit def hessian_1(f):
return jacfwd(jacrev(f)) def hessian_2(f):
return jacfwd(jacfwd(f)) def hessian_3(f):
return jacrev(jacfwd(f)) def hessian_4(f):
return jacrev(jacrev(f)) @jit
def f(x):
return (x ** 2).sum() x = jnp.ones((100,)) print(hessian_1(f)(x))
print(hessian_2(f)(x))
print(hessian_3(f)(x))
print(hessian_4(f)(x)) import time a=time.time()
hessian_1(f)(x)
b=time.time()
print(b-a) hessian_2(f)(x)
c=time.time()
print(c-b) hessian_3(f)(x)
d=time.time()
print(d-b) hessian_4(f)(x)
e=time.time()
print(e-d)

运算结果:

得出另一种结论(之所以上下两次结论不同,个人估计是这个函数太过于简单造成的):

(不一定正确)

两次求导均使用后向模式的要比两次求导均使用前向模式的要速度慢;

第一次求导使用后向模式,第二次求导使用前向模式,要比第一次求导使用前向模式,第二次求导使用反向模式的速度要快。

jax框架为例:求hession矩阵时前后向模式的自动求导的性能差别的更多相关文章

  1. [Pytorch框架] 1.4 Autograd:自动求导

    文章目录 Autograd: 自动求导机制 张量(Tensor) 梯度 Autograd: 自动求导机制 PyTorch 中所有神经网络的核心是 autograd 包. 我们先简单介绍一下这个包,然后 ...

  2. EOJ3536 求蛇形矩阵每一行的和---找规律

    题目链接: https://acm.ecnu.edu.cn/problem/3536/ 题目大意: 求蛇形矩阵的每一行的和,数据范围n<=200000. 思路: 由于n数据较大,所以感觉应该是需 ...

  3. Robot Framework测试框架用例脚本设计方法

    Robot Framework介绍 Robot Framework是一个通用的关键字驱动自动化测试框架.测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储.通过测试库中实现的关键字驱动 ...

  4. Hession矩阵(整理)

    二阶偏导数矩阵也就所谓的赫氏矩阵(Hessian matrix). 一元函数就是二阶导,多元函数就是二阶偏导组成的矩阵. 求向量函数最小值时用的,矩阵正定是最小值存在的充分条件. 经济学中常常遇到求最 ...

  5. 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析

    Newbe.Claptrap 框架非常适合于解决具有并发问题的业务系统.火车票售票系统,就是一个非常典型的场景用例. 本系列我们将逐步从业务.代码.测试和部署多方面来介绍,如何使用 Newbe.Cla ...

  6. 二维KMP - 求字符矩阵的最小覆盖矩阵 - poj 2185

    Milking Grid Problem's Link:http://poj.org/problem?id=2185 Mean: 给你一个n*m的字符矩阵,让你求这个字符矩阵的最小覆盖矩阵,输出这个最 ...

  7. 一本通1641【例 1】矩阵 A×B

    1641: [例 1]矩阵 A×B sol:矩阵乘法模板.三个for循环 #include <bits/stdc++.h> using namespace std; typedef lon ...

  8. Task 4.2 求一个矩阵的最大子矩阵的和

    任务:输入一个二维整形数组,数组里有正数也有负数.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). (1)设计思想:把二维矩阵分解成 ...

  9. 解决使用elementUI框架el-upload跨域上传时session丢失问题

    解决方法一: 1.使用elementUI框架el-upload跨域上传时,后端获取不到cookie,后端接口显示未登录,在添加了 with-credentials="true"后依 ...

  10. [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)

    一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...

随机推荐

  1. redis 锁

    demo1 public ErrorCode initDemo1(@RequestParam("orderNo") String orderNo) throws IOExcepti ...

  2. #PowerBi Superchange PowerBi 开篇(1)

    本书由B站京西漫步老师推荐,并提供了相应的学习资源,有同感兴趣的朋友,可以加我好友免费分享资源. 本书主要以总结笔记,原文+译文+部分案例实操为主. 预计更新时间为23年6月-23年7月. 本系列笔记 ...

  3. 前端学习之nvm

    接手了新的项目 需要使用nodejs,但是版本又不同如何解决呢 如果自己下载配置环境变量也太复杂了 下载nvm https://nvm.uihtm.com/download.html 使用nvm 下载 ...

  4. python globals()[]将字符串转化类,并通过反射执行方法

    背景: 通过关键字设计ui自动化框架,将测试用例及其步骤存放到excel文件:其中步骤中包含了封装好的关键字方法,如打开浏览器.输入页面操作等,关键字保存的内容:具体类实例.方法 通过excel获取到 ...

  5. Java面试知识点(四)重写和重载

    重写override 在 java 中有很多的继承,继承下来的有变量.方法.在有一些子类要实现的方法中,方法名.传的参数.返回值跟父类中的方法一样,但具体实现又跟父类的不一样,这时候我们就需要重写父类 ...

  6. Linux 内核:设备树(4)设备树中各个节点是谁转换的

    Linux 内核:设备树(4)设备树中各个节点是谁转换的 背景 之前,我们在<把device_node转换成platfrom_device>中提到在设备树的device_node到plat ...

  7. SSH免登陆要点

    A要登录到B,则A把自己的公钥发送给B. 涉及到RSA加密:非对称算法,即用一把公钥加密,就必须用一把对应的私钥解密:用私钥签名,就必须用公钥解签名. 签名:为了身份的防篡改. 加密:为了数据的安全性 ...

  8. AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望

    AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望 1. AI Agent(LLM Agent)介绍 1.1. 术语 Agent:"代理&qu ...

  9. JpaRepository:Paging query needs to have a Pageable parameter! Offending method public abstract

    在练习 Spring Data JPA 时,使用分页接口 Pageable 查询数据,接口实现后,运行报错: Paging query needs to have a Pageable paramet ...

  10. MinIO使用记录

    探索MinIO:高性能.分布式对象存储解决方案 注:本文除代码外多数为AI生成 最近因为有项目需要换成Amazon S3的云存储,所以把之前做过的minio部分做一个记录,后面也会把基于这版改造的S3 ...