当前位置: 首页 > news >正文

harmonic-oscillator-pinn实战教程:如何用PyTorch自动微分求解微分方程的一阶与二阶导数?

harmonic-oscillator-pinn实战教程:如何用PyTorch自动微分求解微分方程的一阶与二阶导数?

【免费下载链接】harmonic-oscillator-pinnCode accompanying my blog post: So, what is a physics-informed neural network?项目地址: https://gitcode.com/gh_mirrors/ha/harmonic-oscillator-pinn

harmonic-oscillator-pinn 是一个基于 PyTorch 的物理信息神经网络(PINN)开源实战项目。它围绕一维阻尼谐波振荡器微分方程,手把手演示了如何利用 PyTorch 自动微分求解网络输出的一阶导数与二阶导数,并把微分方程残差作为"物理损失"融入训练,让神经网络学会完整解。🚀 本文将从零讲清 PINN 的核心原理与关键代码,非常适合刚接触"用深度学习求解微分方程"的初学者。

什么是物理信息神经网络(PINN)?

先看一个直观比喻:传统神经网络像"背书",只会记住训练数据附近的答案;而物理信息神经网络(PINN)像"学会了物理定律",即使没见过某段数据,也能根据方程外推出正确答案。

本项目要求解的是物理中非常经典的一维阻尼谐波振荡器方程:

m·d²x/dt² + μ·dx/dt + kx = 0

这是一条随时间衰减的正弦曲线,项目中取 δ=2、ω₀=20 生成精确解,并把求解域设定为 x∈[0,1]。

上图是 PINN 的训练过程动画:绿色点代表"物理损失采样位置",神经网络(蓝色曲线)在这些位置被强制满足微分方程。因此,即使训练数据(橙色点)只有左侧一小段,蓝色预测曲线最终也能与灰色精确解高度重合。

普通神经网络与PINN对比:为什么需要物理约束?

先看普通神经网络的表现,它的训练代码在项目核心文件 Harmonic oscillator PINN.ipynb 中:

普通神经网络只用均方误差(MSE)拟合 10 个橙色训练点,训练到第 1000 步时,蓝色预测曲线依然只能在数据附近"正确",远离数据的区域完全跑偏。这就是"纯数据驱动"的局限——数据稀疏时,模型没有能力推理出物理规律。

而 PINN 在数据损失之外额外引入"物理损失",本质是把微分方程本身变成监督信号,让网络在没有数据的位置也遵守物理定律。✨ 两张动图对比,物理约束的价值一目了然。

快速上手:conda 一键搭建 PINN 运行环境

想复现项目非常简单,先获取仓库:

git clone https://gitcode.com/gh_mirrors/ha/harmonic-oscillator-pinn

环境搭建只需四行命令:

conda create -n pinn python=3 conda activate pinn conda install jupyter numpy matplotlib conda install pytorch torchvision torchaudio -c pytorch

装好后启动 Jupyter,打开Harmonic oscillator PINN.ipynb,按顺序运行所有单元格,即可复现文中全部动图与训练结果。

PyTorch自动微分实战:求解一阶导数与二阶导数的核心代码

这是本文的重点。PINN 之所以能"检查"神经网络是否满足微分方程,全靠 PyTorch 自动微分(autograd)。微分方程里出现了 d²x/dt² 和 dx/dt,分别对应神经网络输出的二阶导数与一阶导数,求解只需两个torch.autograd.grad调用:

x_physics = torch.linspace(0,1,30).view(-1,1).requires_grad_(True) yhp = model(x_physics) dx = torch.autograd.grad(yhp, x_physics, torch.ones_like(yhp), create_graph=True)[0] # 一阶导数 dy/dx dx2 = torch.autograd.grad(dx, x_physics, torch.ones_like(dx), create_graph=True)[0] # 二阶导数 d²y/dx²

三个要点帮你彻底理解这段 PyTorch 自动微分代码:

  1. requires_grad_(True):让输入张量 x_physics 进入计算图,这是求导的前提;
  2. grad 的返回值torch.autograd.grad返回梯度元组,[0]取出第一个元素,即我们需要的导数;
  3. create_graph=True(最关键):表示"为这次求导过程再建一张计算图",这样一阶导数 dx 仍保留在计算图中,二阶导数 dx2 才能继续对 dx 求导,实现"导数套导数"。如果去掉它,dx 会与计算图断开,二阶导数将无法计算。

30 个物理采样点均匀分布在求解域 [0,1] 上,正好覆盖数据缺失的右半段区域。💡

PINN损失函数设计:把微分方程写进训练目标

有了导数,就可以计算微分方程残差(residual),并把它变成损失:

physics = dx2 + mu*dx + k*yhp # 微分方程残差,理想情况下应为 0 loss2 = (1e-4)*torch.mean(physics**2) # 物理损失 loss = loss1 + loss2 # 数据损失 + 物理损失
  • loss1(数据损失):均方误差,约束网络在 10 个观测点附近与真实解一致;
  • loss2(物理损失):让网络在 30 个物理采样点上满足 m·d²x/dt² + μ·dx/dt + kx = 0,系数 1e-4 用于平衡两类损失的尺度。

反向传播时loss.backward()会把两类误差信号同时传回网络,训练 20000 步后,PINN 就"外推"出了完整的衰减振荡解——这正是物理信息神经网络最迷人的地方:用物理定律弥补数据的不足。🎯

实战总结与进阶建议

对比维度普通神经网络PINN
训练数据10 个点10 个点
额外约束微分方程残差
解的覆盖范围仅数据附近整个求解域
训练步数100020000

总结:harmonic-oscillator-pinn 用最简代码展示了 PINN 的核心链路——PyTorch自动微分求一阶导数与二阶导数 → 计算微分方程残差 → 物理损失与数据损失联合训练。掌握了torch.autograd.gradcreate_graph=True的用法,你就能把整套方法迁移到更复杂的偏微分方程(PDE)求解场景。

想深入理解原理,强烈建议亲自跑一遍 Harmonic oscillator PINN.ipynb,把 δ、ω₀、采样点数、损失权重等参数改一改,观察训练动画的变化。动手调参,是理解物理信息神经网络最快的方式。🎓

【免费下载链接】harmonic-oscillator-pinnCode accompanying my blog post: So, what is a physics-informed neural network?项目地址: https://gitcode.com/gh_mirrors/ha/harmonic-oscillator-pinn

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1406406/

相关文章:

  • CSP-J初赛真题深度解析:从算法思维到备赛策略
  • 一个U盘装下所有系统镜像,Ventoy让“反复格式化“成为过去式
  • 八叉树:三维空间索引与高效查询的核心原理与实战应用
  • 小程序迁Vue3实战:miniprogram-to-vue3保姆级转码教程
  • 3 种方式快速集成 SwiftVideoGenerator:CocoaPods、SPM 与手动安装完整教程
  • 免费设计湘潭原木全屋定制源头工厂哪里找 选购指南 - 汇聚至此
  • 企业微信推送消息到微信免费方案:Wecom酱搭建与使用全攻略
  • 论文算法伪代码撰写指南:从LaTeX排版到学术表达
  • 数据中心网络技术演进:从800G光模块、CPO共封装到液冷散热的融合实践
  • 数学建模竞赛获奖全解析:从Python建模到论文写作的系统工程
  • 3周迁完80个页面:一次基于 miniprogram-to-vue3 的真实迁移实录
  • 免费Illustrator智能填充脚本Fillinger指南:30分钟告别手动排版
  • illustrator-scripts 工具箱完整上手:30+款免费AI脚本一次装好,把重复设计工时砍掉90%
  • 液体肥源头厂家|山东九肽生物集团,以生物科技赋能新型液体肥发展 - 优企甄选
  • Windows 10 运行安卓应用完整指南:WSA-Windows-10 安装、避坑与调优一次讲清
  • 游戏资源解密工具怎么用?三步提取 RPG Maker 加密资源
  • 算法复杂度O(√n)深度解析:从质数判定到分块设计
  • Windows下NVM安装与深度使用指南:解决Node.js多版本管理难题
  • 虚幻引擎5角色溶解吸收特效:Niagara粒子与材质系统实战
  • 独栋别墅原木定制:交付缩短30% 1:1还原高端质感 - 汇聚至此
  • 百度网盘秒传链接快速转存完整指南:免费网页工具在线生成与格式转换全平台可用
  • VS2022调试器深度指南:从快捷键到Debug/Release差异与高效调试思维
  • logilda.dll缺失错误全解析:从DLL原理到安全修复方案
  • CSP-J/S初赛笔试核心考点解析与高效备考指南
  • 30分钟跑通AI动作迁移:ComfyUI-MimicMotionWrapper零基础实战笔记
  • 八叉树原理与实战:从空间数据结构到3D引擎性能优化
  • 一段3小时的会议录音,我如何用whisperX语音识别在10分钟内得到带说话人标注的字幕
  • 如何用 PolicyPlus 在 Windows 家庭版上打开组策略编辑器:零门槛上手指南
  • k3s与Docker集成部署指南:轻量K8s集群的容器运行时切换实践
  • 手把手读 memleax 源码:10 个模块的分工与整体架构设计