快速熟悉torchdiffeq用法,从数理逻辑到完整案例【第二部分】

本系列文章板块规划

提示:以下内容仅为个人学习感悟,无法保证完全的正确和权威,大家酌情食用谢谢。
第一部分 torchdiffeq背后的数理逻辑
第二部分 torchdiffeq的基本用法
第三部分 trochdiffeq的升级用法
第四部分 torchdifffeq的案例和代码解析
第五部分 总结

第二部分的参考网站:https://github.com/rtqichen/torchdiffeq

torchdiffeq的基本用法

代码解释

我们来看看官网文档中给出的解释,其翻译为:
“torchdiffeq是一个在PyTorch中实现的常微分方程(ODE)求解器,使用伴随方法支持通过ODE解进行反向传播,可以以恒定的内存成本进行。”
这里的ODE解进行反向传播是指,在神经网络中,ODE被用作网络的一部分时,可以通过ODE的解对于网络进行训练。比如,我们使用神经网络对连续动态系统进行建模,ODE会用来描述系统状态随时间的变化。网络的一部分输出因此将是ODE的解,我们通过这些揭解对于网络进行训练。
关于这里提到的伴随方法(adjoint method),上一部分提到,ODE的解是通过数值方法得到的(欧拉,龙格库塔等等,不是解方程解出来的,是通过算法逼近的),他会储存一些相关梯度,而不需要储存训练过程中的所有状态,因此可以减少内存使用。Pytorch中就写了能够执行ODE解协助的神经网络,和加入了伴随方法节省空间的算法。
那接下来我们来看看,如何使用代码。

torchdiffeq安装

因此,在运行相关的代码时,首先需要安装这个库:

pip install torchdiffeq

如果安装最新版,从Github上的代码仓库安装。这是 torchdiffeq 库的GitHub仓库URL,它指向了库的源代码所在的位置:

pip install git+https://github.com/rtqichen/torchdiffeq

torchdiffeq基本用法

这个库提供了一个主要的接口 odeint,它包含了用于解决初始值问题(Initial Value Problems, IVP)的通用算法,并且对所有主要参数都实现了梯度计算。初始值问题由一个常微分方程(ODE)和一个初始值组成:

dy/dt = f(t, y)    y(t_0) = y_0.

这部分就是是我在第一部分提到的,ODE的基本表达式。我们需要一个方程表达变化,一个初值为迭代的开始。常微分方程求解器通过初始条件,找到满足ODE的连续轨迹。
在这里插入图片描述

使用默认求解器解决一个初始值问题的代码如下:

from torchdiffeq import odeintodeint(func, y0, t)
  1. 从torchdiffeq 导入 odeint 函数,作为求解接口。
  2. 定义ODE函数func,代表了我们要求解的常微分方程。
  3. 初始条件:y0,即在初试时间t_0时刻的函数值y(t_0)
  4. 时间向量t,记为想要计算解的时间点,
  5. 然后调用求解。

官方文档特别推荐使用伴随方法。

from torchdiffeq import odeint_adjoint as odeintodeint(func, y0, t)

伴随方法只是简单地围绕 odeint 进行了封装,但是在反向调用中解决伴随ODE时,它将只使用 O(1) 的内存,但是在使用时,我们需要注意func必须是一个nn.Moudle。

torchdiffeq高级用法

可以基于事件停止ODE的求解。

from torchdiffeq import odeint_event
odeint_event(func, y0, t0, *, event_fn, reverse_time=False, odeint_interface=odeint, **kwargs)
参数类型/默认值描述
func必需代表ODE系统的函数,形式为 func(t, y),它定义了如何根据时间 t 和当前状态 y 计算导数 dy/dt。
y0必需表示ODE系统在初始时间 t0 的初始状态的张量。
t0必需标量,表示初始时间的值。
event_fn必需关键字参数。一个函数,形式为 event_fn(t, y),它返回一个张量。当此张量的任意元素为零时,求解将终止。可以返回多个值来定义多个事件。
reverse_timebool / False指定是否在反向时间中求解ODE。如果为 True,求解器将从 t0 开始向过去求解。默认为 False。
odeint_interfaceodeint 或 odeint_adjoint指定用于通过ODE求解进行微分的模式。odeint 表示直接模式,odeint_adjoint 表示伴随模式。默认是 odeint。
**kwargs-传递给 odeint_interface 的任何剩余关键字参数,可以用来设置求解器选项,如容差、最大步数等。
atolfloat(通常作为 **kwargs 之一)绝对容差参数,控制事件检测的数值精度。
options算法名Adaptive-step,fixed-step等等相应的算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11:function包装器

包装器,体现了C11中的封装性,包装器可以应用于:函数指针,仿函数,lambda 而包装器function的出现刚好也弥补了上述三种语法的不足之处 函数指针写起来较为复杂,而仿函数之间类型不同,lambda则在…

数学建模笔记(10)整数规划和0-1规划

前由 显然通关次数不能是小数,这就涉及到了整数问题。 定义 例题

最新mysql8.3 保姆级 主从复制搭建教程

mysql 主从复制搭建 服务器配置表 机器ip操作系统主机192.168.31.25华为openEuler-22.03-LTS-SP3从机192.168.31.184华为openEuler-22.03-LTS-SP3从机192.168.31.228华为openEuler-22.03-LTS-SP3 1、在3台机器上安装独立的 mysql 1.1 创建myql文件夹用来存放mysql包 mkdir…

python-可视化篇-turtle-画爱心

文章目录 原效果替换关键字5为8,看看效果改下颜色 原效果 import turtle as tt.color(red,pink) t.begin_fill() t.width(5) t.left(135) t.fd(100) t.right(180) t.circle(50,-180) t.left(90) t.circle(50,-180) t.right(180) t.fd(100) t.pu() t.goto(50,-30) t…

开发语言漫谈-C#

C#的#,字面上的意思就是,也就是把C再。微软只所以搞C#就是要抗衡Java。微软当时搞了个J,被Java告了,没办法了只能另取炉灶。从纯技术角度来看,C#设计非常优秀,可以覆盖所有领域,是几乎唯一的全栈…

【用户案例】太美医疗基于Apache DolphinScheduler的应用实践

大家好,我叫杨佳豪,来自于太美医疗。今天我为大家分享的是Apache DolphinScheduler在太美医疗的应用实践。今天的分享主要分为四个部分: 使用历程及选择理由稳定性的改造功能定制与自动化部署运维巡检与优化 使用历程及选择理由 公司介绍 …

.Net <% %>

<% %> 语法 : <% import namespace"system.data"%> 用来导入后台命名空间 指令用于指定当页和用户控件编译器处理 ASP.NET Web 窗体页 (.aspx) 和用户控件 (.ascx) 文件时所使用的设置。<% %> 语法 : <% name %> <% getstr() %&g…

修改el-button按钮背景色后,按钮失去了elementUI原有的hover和active的效果

应完整修改为&#xff1a; <el-button type"primary" icon"el-icon-plus" click"addUser">新增用户</el-button>.el-button--primary:not(.is-disabled) {background-color: #1174de;border-color: #1174de;&:hover {&:not…

尝试在手机上运行google 最新开源的gpt模型 gemma

Gemma介绍 Gemma简介 Gemma是谷歌于2024年2月21日发布的一系列轻量级、最先进的开放语言模型&#xff0c;使用了与创建Gemini模型相同的研究和技术。由Google DeepMind和Google其他团队共同开发。 Gemma提供两种尺寸的模型权重&#xff1a;2B和7B。每种尺寸都带有经过预训练&a…

【iOS ARKit】AR Quick Look 概述

为更好地传播共享 AR 体验&#xff0c;苹果公司引入了 AR Quick Look&#xff0c;并在iOS 12及以上版本系统中深度集成了 AR Quick Look&#xff0c;因此可以通过iMessage、Mail、Notes、 News、 Safari 和 Files 直接体验 AR&#xff0c;AR Quick Look提供了在 iPhone 和iPad …

排序算法,插入排序

插入排序是什么 插入排序&#xff08;Insertion Sort&#xff09;&#xff0c;一般也被称为直接插入排序。对于少量元素的排序&#xff0c;它是一个有效、简单的算法 其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中&#xff0c;最终得到的序列就是已经排…

使用opencv + ffmpeg 开发视频播放器Demo

使用opencv ffmpeg 开发视频播放器Demo #include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp> #include <opencv2/videoio.hpp>extern "C" { #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #includ…

【LeetCode热题100】【二叉树】将有序数组转换为二叉搜索树

题目链接&#xff1a;108. 将有序数组转换为二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 取中间的数作为根节点&#xff0c;左边的数递归转换&#xff0c;右边的数递归转换 class Solution { public:TreeNode *sortedArrayToBST(vector<int> &nums) {retur…

通过 Spark SQL 和 DataFrames 与外部数据源交互

文章目录 前言Spark SQL 与 HiveUDF 通过 Spark SQL Shell, Beeline 和 Tableau 查询Spark SQL ShellBeelineTableau 外部数据源通过 JDBC 连接数据库PostgreSQLMySQL 高阶函数Explode 和 CollectUDF内置函数高阶函数 常用 DataFrames 和 Spark SQL 操作总结 前言 Spark 的数据…

隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践

隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践 文章目录 隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践1.业务背景&#xff1a;安全核对产生的土壤1.1相关政策出台1.2 数据差异的来源 2.产品方案&#xff1a;从试点到规模化的路3.技术共建&#xf…

如何用MATLAB进行核密度估计

核密度估计&#xff08;Kernel Density Estimation&#xff0c;KDE&#xff09;是一种用于估计概率密度函数的非参数方法。以下是核密度估计的基本步骤和公式&#xff1a; 步骤&#xff1a; (1)数据预处理&#xff1a;在进行核密度估计之前&#xff0c;需要对原始数据进行清洗…

微信小程序报错——“errno“: 600001, “errMsg“: “request:fail -2:net::ERR_FAILED“

bug现象 微信小程序体验版和真机调试 进入小程序的时候接口就出现了这个报错 "errno": 600001, "errMsg": "request:fail -2:net::ERR_FAILED" 排查 检查是证书过期还是证书链不完整 证书的信任链完整问题&#xff0c;可以在 亚数信息-SSL/TLS安…

web安全学习笔记(8)

记一下第十二节课的内容。 一、PHP文件包含的四种方式 Include和Include_once 操作系统会读取包含的文件的内容&#xff0c;并将它插入主文件中&#xff0c;include方式的文件包含会在包含失败的情况下输出警告信息&#xff0c;而include_once方式会检查包含的文件是否已经被…

口语教育的黄金时代:AI技术引领教育创新与创业机遇

这些人的赚钱思路是真灵活&#xff01; 这几天刷到艾维奇采访之昊的视频&#xff0c;做口语教育真赚钱&#xff0c;lv的包包随便买&#xff0c;住大房子&#xff0c;三辆车&#xff0c;有评论晒图一个九百的课&#xff0c;卖了1.3万份&#xff0c;直接千万到账。 然后我又想到…

TCP重传机制总结

超时重传概念 超时重传&#xff1a;发送方每发送一个数据包&#xff0c;就会为这个数据包设置一个超时时间&#xff0c;如果在时间内没收到应答这个数据包的ACK包&#xff0c;需要重新发送这个数据包&#xff1b;每次重传后&#xff0c;RTO会成倍增加&#xff0c;且重传次数有…