ENGLISH | 简体中文
MOE-PINNs的核心思想是将多个专家网络集成到一个整体网络中,以解决复杂问题。每个专家网络负责特定方面的预测,然后通过混合或加权它们的输出,得到最终的预测结果。MOE-PINNs通过在PINNs网络后面引入分路器(router)和聚合器(aggregator)来实现。分路器将输入数据分配给不同的专家网络,聚合器将专家网络的输出组合成最终的预测结果。分路器和聚合器可以是任何类型的网络,例如MLP、CNN、RNN等。本案例中,分路器和聚合器均为MLP网络。
模型结构如下图所示:
首先将空间坐标和时间坐标输入到PINNs主干网络中,随后将得到的输出结果输入到分路器中,分路器将输入数据分配给不同的专家网络,每个专家网络负责特定方面的预测,然后通过聚合器将专家网络的输出组合成最终的预测结果。
该训练神经网络的方法在本方法在Burgers方程和Navier-Stokes方程两个方程上进行验证。
伯格斯方程(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'方程的求解。
圆柱绕流,即二维圆柱低速非定常绕流,流动特性与雷诺数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方程求解周期山流动问题是流体力学和气象学领域中的一个经典数值模拟案例,用于研究空气或流体在周期性山地地形上的流动行为。雷诺平均动量方程如下:
$$\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/dataset、physics_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逐行运行训练和验证代码。
经过4000个epoch的训练后,模型预测值如下图所示:
经过4000个epoch的训练后,模型预测值与真实值对比如下图所示:
经过160个epoch的训练后,模型预测值与真实值对比如下图所示:
为了验证MOE架构的有效性,我们在burgers数据集上测试了专家模型数量分别为0、4、8时MOE-PINNs模型的效果。其中专家模型数量为0对应的为不加任何处理的PINNs网络。具体实验结果如下:
可以看到,MOE架构的加入可以有效降低模型损失,提高模型预测精度。
参数 | 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毫秒/步 |
参数 | 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毫秒/步 |
参数 | 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毫秒/步 |
gitee id: Marc-Antoine-6258
email: 775493010@qq.com
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。