1 Star 0 Fork 0

高崇涵 / pinnsformer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

ENGLISH | 简体中文

MOE-PINNs

概述

整体背景

MOE-PINNs的核心思想是将多个专家网络集成到一个整体网络中,以解决复杂问题。每个专家网络负责特定方面的预测,然后通过混合或加权它们的输出,得到最终的预测结果。MOE-PINNs通过在PINNs网络后面引入分路器(router)和聚合器(aggregator)来实现。分路器将输入数据分配给不同的专家网络,聚合器将专家网络的输出组合成最终的预测结果。分路器和聚合器可以是任何类型的网络,例如MLP、CNN、RNN等。本案例中,分路器和聚合器均为MLP网络。

模型结构

模型结构如下图所示:

cylinder_flow

首先将空间坐标和时间坐标输入到PINNs主干网络中,随后将得到的输出结果输入到分路器中,分路器将输入数据分配给不同的专家网络,每个专家网络负责特定方面的预测,然后通过聚合器将专家网络的输出组合成最终的预测结果。

验证方程

该训练神经网络的方法在本方法在Burgers方程和Navier-Stokes方程两个方程上进行验证。

Burgers方程简介

伯格斯方程(Burgers' equation)是一个模拟冲击波的传播和反射的非线性偏微分方程。

Burgers'方程的形式如下:

$$ u_t + uu_x = \epsilon u_{xx}, \quad x \in[-1,1], t \in[0, T], $$

其中$\epsilon=0.01/\pi$,等号左边为对流项,右边为耗散项,本案例使用迪利克雷边界条件和正弦函数的初始条件,形式如下:

$$ u(t, -1) = u(t, 1) = 0, $$

$$ u(0, x) = -sin(\pi x), $$

本案例利用PINNs方法学习位置和时间到相应物理量的映射$(x, t) \mapsto u$,实现Burgers'方程的求解。

Navier-Stokes方程简介

圆柱绕流,即二维圆柱低速非定常绕流,流动特性与雷诺数Re有关。

纳维-斯托克斯方程(Navier-Stokes equation),简称N-S方程,是流体力学领域的经典偏微分方程,在粘性不可压缩情况下,无量纲N-S方程的形式如下:

$$ \frac{\partial u}{\partial x} + \frac{\partial v}{\partial y} = 0 $$

$$ \frac{\partial u} {\partial t} + u \frac{\partial u}{\partial x} + v \frac{\partial u}{\partial y} = - \frac{\partial p}{\partial x} + \frac{1} {Re} (\frac{\partial^2u}{\partial x^2} + \frac{\partial^2u}{\partial y^2}) $$

$$ \frac{\partial v} {\partial t} + u \frac{\partial v}{\partial x} + v \frac{\partial v}{\partial y} = - \frac{\partial p}{\partial y} + \frac{1} {Re} (\frac{\partial^2v}{\partial x^2} + \frac{\partial^2v}{\partial y^2}) $$

其中,Re表示雷诺数。

本案例利用PINNs方法学习位置和时间到相应流场物理量的映射,实现N-S方程的求解:

$$ (x, y, t) \mapsto (u, v, p) $$

雷诺平均Navier-Stokes方程

雷诺平均Navier-Stokes方程求解周期山流动问题是流体力学和气象学领域中的一个经典数值模拟案例,用于研究空气或流体在周期性山地地形上的流动行为。雷诺平均动量方程如下:

$$\rho \bar{u}_j \frac{\partial \bar{u}_i}{\partial x_j}=\rho \bar{f}i+\frac{\partial}{\partial x_j}\left[-\bar{p} \delta{i j}+\mu\left(\frac{\partial \bar{u}_i}{\partial x_j}+\frac{\partial \bar{u}_j}{\partial x_i}\right)-\rho \overline{u_i^{\prime} u_j^{\prime}}\right]$$

快速开始

physics_driven/burgers_pinns/datasetphysics_driven/cylinder_flow_pinns/dataset 中下载验证所需要的数据集,并保存在./dataset目录下。

训练方式一:在命令行中调用train.py脚本

python --case burgers --mode GRAPH --device_target Ascend --device_id 0 --config_file_path ./configs/burgers.yaml

其中, --case表示案例的选择,'burgers'表示选择burgers方程,'cylinder_flow'表示选择Navier-Stokes方程的圆柱绕流数据集,'periodic_hill'表示选择雷诺平均Navier-Stokes方程对周期山数据集进行训练。

--mode表示运行的模式,'GRAPH'表示静态图模式, 'PYNATIVE'表示动态图模式,详见MindSpore官网,默认值'GRAPH';

--device_target表示使用的计算平台类型,可以选择'Ascend'或'GPU',默认值'Ascend';

--device_id表示使用的计算卡编号,可按照实际情况填写,默认值0;

--config_file_path表示参数文件的路径,默认值'./configs/burgers.yaml';

训练方式二:运行Jupyter Notebook

您可以使用中文版英文版Jupyter Notebook逐行运行训练和验证代码。

结果展示

Burgers方程上的验证效果

经过4000个epoch的训练后,模型预测值如下图所示:

Burgers

Navier-Stokes方程上的验证效果

经过4000个epoch的训练后,模型预测值与真实值对比如下图所示:

cylinder flow

雷诺平均Navier-Stokes方程上的验证效果

经过160个epoch的训练后,模型预测值与真实值对比如下图所示:

periodic_hill

消融实验

为了验证MOE架构的有效性,我们在burgers数据集上测试了专家模型数量分别为0、4、8时MOE-PINNs模型的效果。其中专家模型数量为0对应的为不加任何处理的PINNs网络。具体实验结果如下:

train_loss

可以看到,MOE架构的加入可以有效降低模型损失,提高模型预测精度。

性能

Burgers方程

参数 Ascend GPU
硬件资源 Ascend910A, 显存32G;CPU: 2.6HZ, 192核 NVIDIA V100, 显存32G
MindSpore版本 2.0.0 2.0.0
数据集 Burgers数据集 Burgers数据集
参数量 1908 1908
训练参数 batch_size=8192, epochs=5000 batch_size=8192, epochs=5000
测试参数 batch_size=8192 batch_size=8192
优化器 Adam Adam
训练损失 1.9e-3 1.8e-3
验证损失 0.032 0.031
速度 93毫秒/步 90毫秒/步

Navier-Stokes方程

参数 Ascend GPU
硬件资源 Ascend910A, 显存32G;CPU: 2.6HZ, 192核 NVIDIA V100, 显存32G
MindSpore版本 2.0.0 2.0.0
数据集 Cylinder-flow数据集 Cylinder-flow数据集
参数量 2096 2096
训练参数 batch_size=8192, epochs=10000 batch_size=8192, epochs=10000
测试参数 batch_size=8192 batch_size=8192
优化器 Adam Adam
训练损失 1.61e-3 1.51e-3
验证损失 0.189 0.187
速度 111毫秒/步 115毫秒/步

雷诺平均 Navier-Stokes方程

参数 Ascend GPU
硬件资源 Ascend910A, 显存32G;CPU: 2.6HZ, 192核 NVIDIA V100, 显存32G
MindSpore版本 2.0.0 2.0.0
数据集 Periodic_hill数据集 Periodic_hill数据集
参数量 2328 2328
训练参数 batch_size=1000, epochs=200 batch_size=1000, epochs=200
测试参数 batch_size=1000 batch_size=1000
优化器 Adam Adam
训练损失 5.12e-04 5.17e-4
验证损失 0.167 0.177
速度 94毫秒/步 96毫秒/步

Contributor

gitee id: Marc-Antoine-6258

email: 775493010@qq.com

空文件

简介

暂无描述 展开 收起
Python 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/Marc-Antoine-6258/pinnsformer.git
git@gitee.com:Marc-Antoine-6258/pinnsformer.git
Marc-Antoine-6258
pinnsformer
pinnsformer
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891