Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
Force Keng 18c2059872 | 1 year ago | |
---|---|---|
.. | ||
data | 1 year ago | |
images | 1 year ago | |
src | 1 year ago | |
README.md | 1 year ago | |
eval.py | 1 year ago | |
requirements.txt | 1 year ago | |
train.py | 1 year ago |
PINN(Physical Informed Neural Network) 求解频域 3D Maxwell 方程:
$$
\nabla\times\nabla\times \bold{E} + \epsilon_r k^2 \bold{E} = \bold{0}
$$
在立方体内部无源,因此有
$$
\nabla \cdot \bold{E} = 0
$$
则可以化简得出
$$
\nabla^2 \bold{E} + \epsilon_r k^2 \bold{E} = \bold{0}
$$
- 仿真的立方体长、宽、高尺寸均为 $1$,取立方体中心为坐标原点,向右、向上、向外分别为 $x,y,z$ 方向。实心导体贯穿立方体且位于立方体中心,其截面尺寸为 $0.2\times 0.2$。
- 四个环面(上、前、下、右)边界为 PEC(理想导体边界条件),右面为 ABC(吸收边界条件)。
- PEC 边界条件方程为:
$$
\bold{n}\times(\nabla\times\bold{E})=0
$$- ABC(Absorbing boundary condition,吸收边界条件)的边界方程为
$$
\bold{n}\times\bold{E}=0 \
\frac{\partial E_n}{\partial n} = 0
$$
采用
mindelec.architecture
提供的MultiScaleFCCell
模型。采用多通道残差网络结合Sin激活函数的网络架构,其结构如图所示:
数据集包含3类:
- 对立方体内部,使用
mindelec
定义的Cuboid
采样,默认采用均匀网格划分,划分粒度为 $64\times 64 \times 64$ 。- 对立方体的4个PEC面和ABC面,使用
mindelec
定义的随机采样,采样点数默认为65536
。- 对波导管数据,采用外部数据,该数据为nvidia modulus 进行该仿真时采用的数据,详见
data/sample_points_all.npy
文件,包含11000多条数据。
requirements.txt
numpy matplotlib pandas tqdm easydict mindspore >= 1.5.0 mindelec==0.1.0
项目仅支持 Ascend平台。
- 训练命令
python train.py
说明:由于默认将日志打印到控制台,如果要保存成文本,可以使用 Linux 的管道及
tee
命令同时将输出保存到文件,例如保存到log.out
,则运行python train.py | tee log.out
- 推理命令
python eval.py
3D_dielectric_slab/ | eval.py # 评估模型脚本 | README.md # 项目介绍 | requirements.txt # 所需Python库 | train.py # 训练脚本 | +---data/ | sample_points_all.npy # 波导管数据 | +---images/ # README.md 中一些插图 | \---src/ callback.py # 回调函数 config.py # 模型参数配置 dataset.py # 生成数据集 maxwell.py # Maxwell方程定义
# 在立方体中采样配置 cuboid_sampling_config = ed({ 'domain': ed({ # 区域内采样 'random_sampling': False, # 是否随机采样 'size': [64, 64, 64], # 采样网格 }), 'BC': ed({ # 边界点采样 'random_sampling': True, # 是否随机采样 'size': 65536, # 采样点数 'sampler': 'uniform', # 均匀分布采样 }) }) # 模型等config maxwell_3d_config = ed({ "name": "Maxwell3D", # 模型名称 "geom_name": "cuboid", # 几何体名称 "waveguide_name": "waveguide", # 波导管名称 "waveguide_points_path": "data/sample_points_all.npy", # 波导管数据 # 训练参数 "epochs": 3000, # 迭代epoch次数,建议 >=1000 "batch_size": 256, # 训练batch_size "lr": 0.001, # 训练学习率 "pretrained": False, # 是否使用预训练模型,模型从 param_path加载。 "param_path": "checkpoints/model_slab_best.ckpt", # 训练好的参数路径 # 仿真环境参数 "coord_min": [-0.5, -0.5, -0.5], # xyz最小坐标值 "coord_max": [0.5, 0.5, 0.5], # xyz最大坐标值 "slab_len": 0.2, # 中间电导体尺寸 "eps1": 1.5, # 电导体电导率 "eps0": 1.0, # 真空电导率 "wave_number": 32.0, # 波数 # 神经网络参数 "in_channel": 3, # 输入通道数 "out_channel": 3, # 输出通道数 "layers": 6, # 重复次数 "neurons": 32, # 每层的神经元数量 # 评估参数,其中训练好权重路径和训练参数param_path共用 "axis_size": 101, # 评估时网格划分密度 "result_save_dir": "result", # 评估结果保存文件夹 })
训练命令
python train.py | tee log.out
训练过程日志
# grep log.out
epoch: 1 step: 1024, loss is 7.13861083984375
epoch time: 368.796 s, per step time: 360.153 ms
Current epoch: 1, loss: 7.13861083984375, saved checkpoint.
...
epoch: 2995 step: 1024, loss is 0.08456216752529144
epoch time: 18.103 s, per step time: 17.679 ms
...
epoch: 2999 step: 1024, loss is 0.2671869993209839
epoch time: 18.077 s, per step time: 17.653 ms
epoch: 3000 step: 1024, loss is 0.18585500121116638
epoch time: 18.102 s, per step time: 17.678 ms
提供训练结果日志
例如:训练checkpoint将被保存在checkpoints/
目录下,在回调函数中定义只有该epoch比上一个epoch的损失更小,则保存本epoch结束时的模型,否则不保存模型。
推理脚本
python eval.py
波导管输入面结果(最大差值 $E_z = 0.05378$, 其中最大值为 $2.082099191$,而在 $E_x, E_y$ 方向的差值均很小,分别为 $0.00221, 0.00071$)。验证截图如下:
其中图中横坐标是各个点,纵坐标是值,例如第图最上面为 $E_z$ 的预测值和真实值。共有 13277 个点,真实值为绿色线连接,预测值为红色线,可以看出两者几乎一致。最下面的图(蓝色曲线)给出了真实值和预测值的差值。
$E_x, E_y$ 的真实值均为0,因此只给出预测值,预测值也接近0.
真实值由$(y,z)$ 坐标给出,难以绘制二维图。因此仅给出预测值结果,如下图:
波导管在 $x=-0.5$ 截面,该面上只有 $E_z$ 分量的电场,场强由前述训练数据给出。下图绘制出三个中心面,即 $x=0, y=0, z=0$ 三个面上的场强分布。
波导管输入截面 $(x=0)$ 的真实值、预测值和差值如下图所示,其中仅有 $E_z$ 方向有输入,其他方向输入为0,因此此处给出 $E_z$ 方向):
从图中可以看出,$E_x, E_y$ 几乎为总 $0$。
由于中间的介质电导率为 $1.5$,而周围的为 $1.0$,可以看到电磁波主要在中间的电介质中传播。
提供您训练性能的详细描述.
Parameters | Ascend 910 |
---|---|
Model Version | PINN Cavity |
Resource | Ascend: 1*Ascend 910, CPU: 24vCPUs 96GB |
uploaded Date | 09/30/2022 (month/day/year) |
MindSpore Version | 1.15.1 |
Dataset | 立方体内部、边界采样;外部波导管数据 |
Training Parameters | epoch=3000, steps per epoch=1024, batch_size =256 |
Optimizer | Adam |
Loss Function | L2范数 |
outputs | 电场分量 $E_x$, $E_y$, $E_z$ |
Loss | 0.0029008 |
Speed | 16.8 s/epoch(第一个epoch耗时较长,约368秒) |
Total time | 14 hours |
Parameters (KB) | 220 KB |
Scripts | link |
Parameters | Ascend |
---|---|
Model Version | ResNet18 |
Resource | Ascend: 1*Ascend 910, CPU: 24vCPUs 96GB |
Uploaded Date | 9/30/2022 (month/day/year) |
MindSpore Version | 1.15.1 |
Dataset | 自定义数据集 |
outputs | 电场分量 $E_x$, $E_y$, $E_z$ |
Model for inference | 220KB (.ckpt) |
Total time | 1.36 Minutes |
如果你想参与贡献昇思的工作当中,请阅读昇思贡献指南和how_to_contribute
此部分根据自己的情况进行更改,填写自己的院校和邮箱
请浏览官方主页。
2022昇腾AI创新大赛昇思赛道 第二批 赛题十六:利用MindSpore实现3D频域Maxwell方程求解
CSV Python
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》