基于深度学习的微分方程求解框架

pydens的Python项目详细描述


LicensePythonTensorFlowRun Status

皮登斯

PyDEns是一个使用神经网络求解常微分方程和偏微分方程(ODEs&pde)的框架。使用PyDEns可以解决

  • 一个大家族中的pde&ODEs,包括heat-equationpoisson equation和{a7}
  • 偏微分方程的参数族
  • 具有可训练系数的偏微分方程。在

本页概述了PyDEns的主要功能。为了深入了解,我们建议您也阅读the tutorial。在

PyDEns入门:解决常见的pde

我们来解泊松方程

使用带有tahn-激活的简单前馈神经网络。第一步是向当前名称空间添加tokens语法(用于写微分方程的表达式):

frompydensimportSolver,NumpySampler,add_tokensimportnumpyasnpadd_tokens()# we've now got functions like sin, cos, D in our namespace. More on that later!

现在可以设置一个^{str1}$PyDEns-模型,使用configuration dictionary解决手头的任务。注意区分标记Dsin-标记的用法:

^{pr2}$

然后运行优化程序

dg=Solver(config)dg.fit(batch_size=100,sampler=us,n_iters=1500)

在几分之一秒内,我们就得到了[0,1]X[0,1]-平方上解的无网格近似:

深入研究PyDEns-功能

PyDEns不仅可以解决常见的偏微分方程:它还可以处理(i)参数偏微分方程族和(ii)具有可训练系数的偏微分方程。在

求解偏微分方程的参数族

考虑常微分方程的

显然,解决方案是一个sin波,其相位参数为ϵ:

解决这个问题和解决常见的pde一样容易。您只需在等式中引入参数,使用标记P

pde={'n_dims':1,'form':lambdau,t,e:D(u,t)-P(e)*np.pi*cos(P(e)*np.pi*t),'initial_condition':1}config={'pde':pde}# One for argument, one for parameters=NumpySampler('uniform')&NumpySampler('uniform',low=1,high=5)dg=Solver(config)dg.fit(batch_size=1000,sampler=s,n_iters=5000)# solving the whole family takes no more than a couple of seconds!

查看结果:

求解可训练系数

使用PyDEns可以让事情变得更加有趣!假设系统的初始状态未知,且尚未确定

当然,如果没有其他信息,the problem is undefined。为了让事情变得更好,让我们在其他地方修复系统的状态:

设置此问题需要一个slightly more complex configuring。注意在问题的初始条件中使用了V-token,它代表可训练变量。还要注意train_steps-键,config,其中两个列车步骤配置:一个用于更好地解方程,另一个用于满足附加约束:

pde={'n_dims':1,'form':lambdau,t:D(u,t)-2*np.pi*cos(2*np.pi*t),'initial_condition':lambda:V(3.0)}config={'pde':pde,'track':{'u05':lambdau,t:u-2},'train_steps':{'initial_condition_step':{'scope':'addendums','loss':{'name':'mse','predictions':'u05'}},'equation_step':{'scope':'-addendums'}}}s1=NumpySampler('uniform')s2=ConstantSampler(0.5)

模型拟合现在分为两部分:(i)求解方程和(ii)调整初始条件以满足附加约束:

dg.fit(batch_size=150,sampler=s1,n_iters=2000,train_mode='equation_step')dg.fit(batch_size=150,sampler=s2,n_iters=2000,train_mode='initial_condition_step')

查看结果:

安装

首先,您必须手动安装tensorflow, 因为您可能需要CPU/GPU的特定版本或特定版本。在

稳定的python包

用现代的pipenv

pipenv install pydens

用老式的pip

pip3 install pydens

开发版本

pipenv install git+https://github.com/analysiscenter/pydens.git
pip3 install git+https://github.com/analysiscenter/pydens.git

作为项目存储库进行安装:

不要忘记使用标志--recursive来确保BatchFlow子模块也被克隆。在

git clone --recursive https://github.com/analysiscenter/pydens.git

在这种情况下,您需要手动安装依赖项。在

引用皮登斯

如果有助于您的研究,请引用PyDEns。在

Roman Khudorozhkov, Sergey Tsimfer, Alexander Koryagin. PyDEns framework for solving differential equations with deep learning. 2019.
@misc{pydens_2019,
  author       = {Khudorozhkov R. and Tsimfer S. and Koryagin. A.},
  title        = {PyDEns framework for solving differential equations with deep learning},
  year         = 2019
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
图像处理Java 8 ImageIO在Linux中无法正确读取JPEG   spring如何用Java 1.4兼容版本替换@Resource注释   java Http请求参数类型传播   在web浏览器中看不到Java Maven Tomcatplugin web应用程序   jvm在Java中使用直接内存的目的是什么?   如何从列表转换为字符串java   java setAdapter gridview发送上下文   SwingJava。方法上的lang.NullPointerException   java什么是shell脚本、makefile和ant文件   当使用getGraphics()方法时,java JPanel图形会闪烁   java如何将迭代转换为递归?   java为什么我的抽屉菜单在同一个XML上有ConstraintLayout时没有响应?   java如何在图像上画一个圆?   Android studio:Rabbitmq:Error:java。lang.ClassNotFoundException:类io。千分尺。果心仪器找不到仪表注册表