当前位置: 首页 > article >正文

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


http://www.kler.cn/a/467602.html

相关文章:

  • 查询Mysql中被锁住的表以及如何解锁
  • AWS DMS基础知识
  • Sql中WITH的作用
  • 华为 Sensor 省电策略调研
  • 数据挖掘——概论
  • oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln
  • 探索电商新维度:利用JAVA爬虫获取1688店铺商品接口
  • MySQL 日志简介
  • 信息收集在网络安全中的重要性在网络安全领域,渗透测试
  • HTTP协议-报文结构
  • Java 内存溢出(OOM)问题的排查与解决
  • 《攀爬者》
  • 探讨面向未来的框架新技术:逻辑驱动和自适应框架的突破
  • k8s集群,CRI-Docker部署条件及方法
  • Spring Cloud微服务多模块架构:父子工程搭建实践
  • 提示词教程:零样本提示
  • ArkTs-@Builder引用传递问题
  • 【MongoDB详解】
  • 旧服务改造及微服务架构演进
  • 如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13
  • 现代光学基础6
  • ruckus R510升级到Unleashe后不能访问
  • 端到端性能体验稳定性优化常见方案
  • webpack01
  • Elasticsearch 文档批处理 混合处理 批量操作
  • (四)基于STM32通过Event Recoder实现时间测量功能