Loading [MathJax]/jax/output/HTML-CSS/jax.js
220 Star 932 Fork 688

GVPMindSpore/mindscience

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
.gitee
.jenkins
MindChemistry
MindEarth
MindElec
cmake
docs
examples
AD_FDTD
data_driven
hybrid_driven/feature_based_MT_inversion
metasurface/metasurface_holograms
physics_driven
frequency_domain_maxwell
docs
src
README.md
README_CN.md
__init__.py
solve.py
frequency_domain_maxwell_3D
incremental_learning
pinn_fwi
time_domain_maxwell
research/RadioImageDet
README.md
README_CN.md
mindelec
CMakeLists.txt
LICENSE
NOTICE
README.md
README_CN.md
RELEASE.md
RELEASE_CN.md
Third_Party_Open_Source_Software_Notice
build.sh
requirements.txt
setup.py
version.txt
MindFlow
MindSPONGE
SciAI
docs
tests
RELEASE.md
.gitignore
CONTRIBUTION.md
LICENSE
NOTICE
OWNERS
README.md
README_CN.md
models.md
models_en.md
requirements.txt
version.txt
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

目录

频域麦克斯韦方程(Maxwell's Equation in Frequency Domain)

频域麦克斯韦方程是一个描述电磁波的椭圆偏微分方程,其基本形式如下:

(2+k2)u=0

其中k=ωc是分离常数波数, ω是频率, c是光速。

AI求解频域麦克斯韦方程

AI求解频域麦克斯韦方程的整体网络架构如下:

network_architecture

以二维的频域麦克斯韦方程为例,网络输入为Ω=(x,y)[0,1]2, 输出为方程的解u(x,y)。基于网络的输出和MindSpore框架的自动微分功能可以构建网络的训练损失函数,该损失函数分为PDE和BC两部分: Lpde=1N1N1i=1||(2+k2)u(xi,yi)||2 Lbc=1N2N2i=1||u(xi,yi)||2 为了保证上述方程解的唯一性,我们给定方程的边界条件为u|Ω=sin(kx)。用户可以自定义分离常数波数k,本案例中取值为k=2

数据集

AI求解频域麦克斯韦方程时使用自监督方式训练,数据集在运行过程中实时生成,训练与推理数据生成的方式如下:

  • 训练数据:每次迭代中,在可行域内部从101*101的均匀网格中选取128个样本点计算损失函数的PDE部分Lpde;在边界上随机生成128个样本点计算损失函数的BC部分Lbc
  • 评估数据:在可行域内生成101*101的均匀网格点,其对应的label为方程解析解u=sin(kx)
    • 注:数据在src/dataset.py中处理。

环境要求

脚本说明

脚本及样例代码

.
└─FrequencyDomainMaxwell
  ├─README.md
  ├─docs                              # README示意图
  ├─src
    ├──callback.py                    # 回调函数
    ├──config.py                      # 参数配置
    ├──dataset.py                     # 数据集配置
    ├──model.py                       # 网络模型
  ├──solve.py                         # 训练和评估网络

脚本参数

src/config.py里面可以设置训练的参数和采样参数

Helmholtz2D_config = ed({
    "name": "Helmholtz2D",                  # 方程名称
    "columns_list": ["input", "label"],     # 评估数据集名称
    "epochs": 10,                           # 训练周期
    "batch_size": 128,                      # 单次训练样本数目
    "lr": 0.001,                            # 学习率
    "coord_min": [0.0, 0.0],                # 求解域下限
    "coord_max": [1.0, 1.0],                # 求解域上限
    "axis_size": 101,                       # 网格粗细度
    "wave_number": 2                        # 分离常数波数
})

rectangle_sampling_config = ed({
    'domain' : ed({                         # 定义内部采样率
        'random_sampling' : False,          # 是否使用随机
        'size' : [100, 100],                # 不使用随机采样时的网格分辨率
    }),
    'BC' : ed({                             # 定义边界采样率
        'random_sampling' : True,           # 是否使用随机
        'size' : 128,                       # 使用随机采样时的总采样数
        'with_normal' : False,              # 是否返回边界法向量
    })
})

模型训练

您可以通过solve.py脚本训练求解频域麦克斯韦方程,训练过程中模型参数会自动保存为检查点文件:

python solve.py

训练过程中会实时显示损失函数值:

epoch: 1 step: 79, loss is 630.0
epoch time: 26461.205 ms, per step time: 334.952 ms
epoch: 2 step: 79, loss is 196.4
epoch time: 278.594 ms, per step time: 3.527 ms
epoch: 3 step: 79, loss is 191.4
================================Start Evaluation================================
Total prediction time: 10.388108491897583 s
l2_error:  0.1875916075312643
=================================End Evaluation=================================
epoch time: 10678.531 ms, per step time: 135.171 ms
epoch: 4 step: 79, loss is 3.998
epoch time: 277.924 ms, per step time: 3.518 ms
epoch: 5 step: 79, loss is 3.082
epoch time: 274.681 ms, per step time: 3.477 ms
epoch: 6 step: 79, loss is 2.469
================================Start Evaluation================================
Total prediction time: 0.009278535842895508 s
l2_error:  0.019952444820775538
=================================End Evaluation=================================
epoch time: 292.866 ms, per step time: 3.707 ms
epoch: 7 step: 79, loss is 1.934
epoch time: 275.578 ms, per step time: 3.488 ms
epoch: 8 step: 79, loss is 2.162
epoch time: 274.334 ms, per step time: 3.473 ms
epoch: 9 step: 79, loss is 1.744
================================Start Evaluation================================
Total prediction time: 0.0029311180114746094 s
l2_error:  0.017332553759497542
=================================End Evaluation=================================
epoch time: 277.262 ms, per step time: 3.510 ms
epoch: 10 step: 79, loss is 1.502
epoch time: 272.946 ms, per step time: 3.455 ms
l2 error: 0.0173325538
per step time: 3.4550081325

随机情况说明

dataset.py中设置了“create_dataset”函数内的种子,同时还使用了train.py中的随机种子。

MindScience主页

请浏览官网主页

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mindspore/mindscience.git
git@gitee.com:mindspore/mindscience.git
mindspore
mindscience
mindscience
master

搜索帮助