PINN方程残差以及损失函数的理解

一、计算方程残差

def net_f(self, x, t):
    u = self.net_u(x, t)
    u_t = torch.autograd.grad(u, t, grad_outputs=torch.ones_like(u), create_graph=True)[0]
    u_x = torch.autograd.grad(u, x, grad_outputs=torch.ones_like(u), create_graph=True)[0]
    u_xx = torch.autograd.grad(u_x, x, grad_outputs=torch.ones_like(u_x), create_graph=True)[0]
    f = u_t + u * u_x - self.nu * u_xx
    return f  # 方程的残差

理解:net_f是计算方程的残差

① 计算u_t:对u关于t的梯度

② 计算u_x:对u关于x的梯度

③ 计算u_xx:对u_x关于x的梯度

④ 残差计算:f = u_t + u * u_x - self.nu * u_xx

二、损失函数

def loss_func(self):
    u_pred = self.net_u(self.x_u, self.t_u)
    f_pred = self.net_f(self.x_f, self.t_f)
    loss_u = torch.mean((self.u - u_pred) ** 2)
    loss_f = torch.mean(f_pred ** 2)
    return loss_u + loss_f

理解:

x_f与t_f:它们是X_f_train的两列,而X_f_train是在x,t范围内随机生成的数据点

loss_u:是初始边界条件的损失(通过前馈神经网络捕获的差异项)

loss_f:是为了让模型学习把loss_f降到最小,使参数能够学习到物理方程的规律

两者相加loss_f+loss_u构成了PINN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几两春秋梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值