在基于物理信息的自解码器中,神经网络的输入为采样点(X)与隐向量(Z)的融合,神经网络的主体结构采用多通道残差网络并结合Sin激活函数。

代码如下:

# initialize latent vector

num_scenarios = config["num_scenarios"]

latent_size = config["latent_vector_size"]

latent_init = np.random.randn(num_scenarios, latent_size) / np.sqrt(latent_size)

latent_vector = Parameter(Tensor(latent_init, ms_type.float32), requires_grad=True)

network = MultiScaleFCCell(config["input_size"],

config["output_size"],

layers=config["layers"],

neurons=config["neurons"],

residual=config["residual"],

weight_init=HeUniform(negative_slope=math.sqrt(5)),

act="sin",

num_scales=config["num_scales"],

amp_factor=config["amp_factor"],

scale_factor=config["scale_factor"],

input_scale=config["input_scale"],

input_center=config["input_center"],

latent_vector=latent_vector

)

自适应加权损失函数加速收敛

在本案例中,由于源区附近区域的加密采样并作为独立子数据集进行网络训练,因此损失函数的构成包含如下五项:有源区域的控制方程和初始条件、无源区域的控制方程和初始条件以及边界条件。实验表明,这五项损失函数量级差异明显,因此简单的损失函数求和会导致网络训练失败,而手动调节每项损失函数的权重信息极为繁琐。MindElec发展了一种基于多任务学习不确定性估计的加权算法,通过引入可训的参数,自适应地调节每项损失函数的权重,可以显著地提升训练速度和精度。该算法的实现具体如下:

代码如下:

class MTLWeightedLossCell(nn.Cell):

def __init__(self, num_losses):

super(MTLWeightedLossCell, self).__init__(auto_prefix=False)

self.num_losses = num_losses

self.params = Parameter(Tensor(np.ones(num_losses), mstype.float32), requires_grad=True)

self.concat = ops.Concat(axis=0)

self.pow = ops.Pow()

self.log = ops.Log()

self.div = ops.RealDiv()

def construct(self, losses):

loss_sum = 0

params = self.pow(self.params, 2)

for i in range(self.num_losses):

weighted_loss = 0.5 * self.div(losses[i], params[i]) + self.log(params[i] + 1.0)

loss_sum = loss_sum + weighted_loss

return loss_sum

# self-adaptive weighting

mtl = MTLWeightedLossCell(num_losses=elec_train_dataset.num_dataset)

模型测试

MindElec可以通过自定义的callback函数,利用边训练边推理的功能。用户可以直接加载测试数据集,然后实现自定义的callback函数实现推理并分析结果。

代码如下:

callbacks = [LossAndTimeMonitor(epoch_steps)]

if config.get("train_with_eval", False):

input_data, label_data = get_test_data(config["test_data_path"])

eval_callback = PredictCallback(network, input_data, label_data, config=config, visual_fn=visual_result)

callbacks += [eval_callback]

模型增量训练

针对于新的问题参数,以(ϵr,μr)=(2,2)(ϵr,μr)=(2,2)为例,我们需要加载预训练的网络权重和初始化一个新的隐向量(Z)。

代码如下:

# load pretrained ckpt

param_dict = load_checkpoint(config["load_ckpt_path"])

loaded_ckpt_dict = {}

latent_vector_ckpt = 0

for name in param_dict:

if name == "model.latent_vector":

latent_vector_ckpt = param_dict[name].data.asnumpy()

elif "network" in name and "moment" not in name:

loaded_ckpt_dict[name] = param_dict[name]

# initialize the new latent vector

num_scenarios = config["num_scenarios"]

latent_size = config["latent_vector_size"]

latent_norm = np.mean(np.linalg.norm(latent_vector_ckpt, axis=1))

latent_init = np.zeros((num_scenarios, latent_size))

latent_vector = Parameter(Tensor(latent_init, ms_type.float32), requires_grad=True)

# optimizer

if config.get("finetune_model"):

model_params = model.trainable_params()

else:

model_params = [param for param in model.trainable_params()

if ("bias" not in param.name and "weight" not in param.name)]

params = model_params + mtl.trainable_params()

lr_scheduler = MultiStepLR(config["lr"], config["milestones"], config["lr_gamma"],

steps_per_epoch, config["train_epoch"])

lr = lr_scheduler.get_lr()

optim = nn.Adam(params, learning_rate=Tensor(lr))

,我们采用finetune_latent_with_model的增量训练模式,即同时更新隐向量和网络结构。电磁场的瞬时分布与参考标签数据的对比结果如下图所示。相较于PINNs直接求解单个问题,在达到同等精度(相对误差6%)的情况下,增量训练的方法得到了10倍以上的加速。

如下图:

求解麦克斯韦方程族时需要构建的神经网络相关推荐

  1. 增量训练求解麦克斯韦方程族

    原始的PINNs(Physics-Informed Neural Networks, PINNs)方法不具备求解一类方程的能力.当方程中的特征参数(如介电系数等)发生变化时需要重新训练,增加了求解时间 ...

  2. UA OPTI501 电磁波 求解麦克斯韦方程组的Fourier方法3 Coulomb Gauge下讨论Maxwell方程

    UA OPTI501 电磁波 求解麦克斯韦方程组的Fourier方法3 Coulomb Gauge下讨论Maxwell方程 Use the macroscopic equation with D-fi ...

  3. 用计算机计算麦克斯韦方程,数学之美~(01)最伟大的数学公式!

    麦克斯韦电磁场理论的要点可以归结为: ①几分立的带电体或电流,它们之间的一切电的及磁的作用都是通过它们之间的中间区域传递的,不论中间区域是真空还是实体物质. ②电能或磁能不仅存在于带电体.磁化体或带电 ...

  4. UA OPTI501 电磁波 求解麦克斯韦方程组的Fourier方法1 在频域中讨论麦克斯韦方程组

    UA OPTI501 电磁波 求解麦克斯韦方程组的Fourier方法1 在频域中讨论麦克斯韦方程组 标量势与矢量势 Lorenz Gauge 麦克斯韦方程组的意义是阐述了电磁场的源(ρfree,Jfr ...

  5. matlab 雷诺,matlab求解雷诺方程

    而边界元法所用的 函数在求解域内完全满足基本方程,但是在边界上则近似的满足边界条件.一.雷诺方程的数值解法 根据边界条件求解雷诺方程,这在数学上称为边值问题...... 针对球轴承雷诺方程求解困难的问 ...

  6. 中科院院士「修正」了麦克斯韦方程?研究发材料期刊,两度热搜,两极评价...

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 晓查 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 已提出1 ...

  7. UA OPTI501 电磁波8 麦克斯韦方程边界条件的推导

    UA OPTI501 电磁波8 习题课:麦克斯韦方程边界条件的推导 边界条件的含义 用Maxwell方程推导边界条件 Maxwell Macroscopic Equations: ∇⋅D=ρfree∇ ...

  8. UA PHYS515 电磁理论I 麦克斯韦方程组基础5 电动力学的四类问题与对应的麦克斯韦方程

    UA PHYS515 电磁理论I 麦克斯韦方程组基础5 电动力学的四类问题与对应的麦克斯韦方程 Electrostatics Magnetostatics Electromagnetic wave 一 ...

  9. UA PHYS515 电磁理论I 麦克斯韦方程组基础4 介质中的麦克斯韦方程

    UA PHYS515 电磁理论I 麦克斯韦方程组基础4 介质中的麦克斯韦方程 推导介质中的麦克斯韦方程 电位移矢量与辅助磁场强度 推导介质中的麦克斯韦方程 前三讲我们介绍了真空中的麦克斯韦方程的建立, ...

最新文章

  1. shell-sed脚本
  2. jsp里面编写java代码注意加双引号
  3. oracle去重保留一条_关于oracle数据库物理结构(文件)的一些总结
  4. 通用DbContext封装
  5. 工程实践:给函数取一个好的名字
  6. 游戏开发筑基之用“*“输出三角形(一个for循环)及打印控制台进度条
  7. alexnet论文_【SOT】Siamese RPN++ 论文和代码解析
  8. 搞笑--亚阳影视官方的keyword里写“破解版”
  9. IP-Link简单实验配置
  10. python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析
  11. 微软解析新Edge浏览器的多进程体系结构
  12. 中文实时语音识别引擎
  13. 常用的一些伺服电机参数
  14. 英语写作翻译-动词(一)
  15. Web 视频播放前前后后那些事
  16. 自动化测试之验证码处理
  17. python实现p图软件_PyQt+PIL做P图软件(终结版【附完整代码】)
  18. 网上阅卷软件测试初学者,如何对网上阅卷系统的进行比较测试
  19. PC、单片机、DSP、FPGA、ARM资源对比
  20. QQ游戏的PKG格式文件解压工具

热门文章

  1. Java抽奖-总概率中奖几率
  2. 19 | 本地化(国际化)
  3. 如诗的别离——品读TERRY的告别邮件
  4. 工业互联网2022:第一梯队成型、专精玩家突围
  5. ubuntu 下也能方便的观看pps了
  6. Unicode标准以及其常见的编码方案
  7. python读取excel内容把空格去掉_python读取EXCEL是去掉空白行和表头全部重命名
  8. PROTEUS最新版本下载CSDN_倒带2021下载-倒带2021app下载v2.8.10最新版本
  9. Spring5框架学习
  10. 想要应聘银行工作,这些分析你都清楚吗?