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

给出代码:

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. 使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法

    使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法 1.打开"Windows Defender". 2.点击"病毒和威胁防护". 3.点击 ...

  2. 夜莺监控 V7 第二个 beta 版本发布,内置集成故障自愈能力,简化部署

    经过一个半月的打磨改进,夜莺监控 V7 第二个 beta 版本发布了,本次发布的主要亮点是内置集成故障自愈能力,简化架构,同时做了其他 19 项改进.一些重要的改进如下: feat: 集成故障自愈的能 ...

  3. docker 报Failed to create thread: Operation not permitted (1) 解决方法

    docker启动容器时报:Failed to create thread: Operation not permitted (1) 原因:docker内的用户权限受限 解决办法1: 启动docker时 ...

  4. HTML5画布-小球碰撞

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` HTML5画布-小球碰撞 日期:2017-7-18 阿珏 ...

  5. FEDORA 显卡驱动安装

    FEDORA 显卡驱动安装 在fedora中akmod-nvidia包可以自动的处理开源驱动屏蔽等各种问题, 强烈推荐用这个安显卡驱动. -1. 在 BIOS 中关闭安全启动 0. 切换桌面环境至 X ...

  6. 关于Android开机动画调试的一点小小的经验

    格式要求: 开机动画图片既可以是jpg文件,也可以是png文件,只是一定要按顺序命名.文件名命名的国际惯例是五位数,即:00000.00001. 00002--也可以是文件夹名称+下划线+序数,即:p ...

  7. Linux 中内核与应用程序的交互方式:netlink

    netlink介绍 一般来说用户空间和内核空间的通信方式有很多种,而Netlink可以实现双工通信. Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应 ...

  8. arm-gcc 命名规则

    背景 在 Ubuntu中交叉编译裸机程序的时候,注意到了这个问题:因此对此作为一个总结. 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] ar ...

  9. .net core 3.1 + 动态执行C#

    1.使用 using Microsoft.CodeAnalysis.CSharp.Scripting;using Microsoft.CodeAnalysis.Scripting; 2.定义 Rosl ...

  10. FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作

    ​<FFmpeg开发实战:从零基础到短视频上线>一书的"3.4.3  把原始的H264文件封装为MP4格式"介绍了如何把H.264裸流封装为MP4文件.那么在网络上传输 ...