关于PDE频率的问题

讨论:关于PDE频率的问题

  • 关于PDE频率的问题
    • 问题
    • 复现
    • 讨论
    • 解决方法

关于PDE频率的问题

问题

在这篇文章下有人提出一个问题:

在使用物理信息神经网络对固定求解区域内进行物理场的预测,具体来说是在求解传热问题。在定义域为1或者大于0.4的正方形求解域中,已知四条边的温度,和区域内的热传递方程,物理信息神经网络可以进行正确求解的。但是当求解区域缩小到0.4以下时,求解结果变的错误。

具体来说,我所采用的PINN网络结构是全连接神经网络,目标函数函数由两个损失函数构成,第一个损失函数是求解区域内的传热方程,第二个损失函数是边界上已知数据与预测值的均方误差,且两个损失函数。现在有五个实验例子,第一个例子,求解区域在1大小的正方形的时候,PINN可以正确预测。第二个例子,求解区域在0.4大小的正方形的时候,PINN可以正确预测,但是需要经过多轮训练。第三个例子,求解区域在0.1大小的正方形的时候,PINN不能正确预测,经过多轮训练后仍然不能得到正确结果。第四个例子,求解区域在0.1大小的正方形的时候,把第二个损失函数的权重乘以1000,PINN可以正确预测。第五个例子,求解区域在0.01大小的正方形的时候,把第二个损失函数的权重乘以1000,PINN不能正确预测,即使损失函数权重乘以10000也无法预测

尝试了包括这篇文章的一些调节权重的算法,但是结果都不太好,我想请问一下这块问题可能出在什么地方呢?可能是什么问题呢?PINN求解小尺度高频的问题吗?

简单来说,就是提问者对于同一个PDE问题,保持解 u u u 在求解域 Ω \Omega Ω 上的复杂度不变,对 Ω \Omega Ω 的大小进行变换后发现,求解域越小,PINN越难以求得正确的解。针对这一现象,提问者怀疑是PINN求解小尺度高频的问题。

当时,我看到这个问题时是这么想的:

我个人认为PINN能否正确预测与求解区域的大小并没有直接关联,可能和求解区域内解的复杂度关联更为密切。因为使用简单的仿射变换就可以把 [0.1,0.1] 的区域映射到 [1,1] 的区域上,而利用神经网络去拟合这个变换也是相对而言比较简单的,因此 [0.1,0.1] 的区域和 [1,1] 的区域对于PINN来说可能不会造成太大的差别。
我不太清楚你要求解的传热问题的具体形式(如边界条件、已知数据等),如果能够提供可复现的代码可以帮助我更全面地了解你所面对的问题。
这两天我会利用波动方程构建一些样例来对你所说的问题进行复现。

换句话说,我当时认为神经网络去学习一个相应的缩小或者放大的变换是相对容易的,既然保持了解 u u u 在求解域 Ω \Omega Ω 上的复杂度不变,那么应该也能较好的学习出真实的解。

复现

于是,我首先对他所描述的现象进行了复现:

对于方腔流
u ⋅ ∇ u + ∇ p − 1 R e Δ u = 0 , i n Ω , ∇ ⋅ u = 0 , i n Ω , u ( x , y ) = ( 1 , 0 ) , o n Γ 1 , u ( x , y ) = ( 0 , 0 ) , o n Γ 0 . \begin{aligned} &\boldsymbol{u}\cdot\nabla\boldsymbol{u}+\nabla p-\frac1{Re}\Delta\boldsymbol{u}=0,\quad&\mathrm{in}\quad\Omega, \\ &\nabla\cdot\boldsymbol{u}=0,\quad&\mathrm{in}\quad\Omega, \\ &\boldsymbol{u}(x,y)=(1,0),\quad&\mathrm{on}\quad\Gamma_1, \\ &u(x,y)=(0,0),\quad&\mathrm{on}\quad\Gamma_{0}. \end{aligned} uu+pRe1Δu=0,u=0,u(x,y)=(1,0),u(x,y)=(0,0),inΩ,inΩ,onΓ1,onΓ0.
对其计算域缩放后训练结果如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

上面三幅图分别为计算域 Ω = [ 0 , 1 ] 2 , [ 0 , 0.1 ] 2 , [ 0 , 0.01 ] 2 \Omega = [0,1]^2,[0,0.1]^2,[0,0.01]^2 Ω=[0,1]2,[0,0.1]2,[0,0.01]2 的情况,可以看到,当计算域 Ω = [ 0 , 1 ] 2 \Omega = [0,1]^2 Ω=[0,1]2 时,PINN能够学习到比较准确的解;而当计算域 Ω = [ 0 , 0.1 ] 2 \Omega = [0,0.1]^2 Ω=[0,0.1]2 时,PINN 的结果就没有那么令人满意了;当计算域 Ω = [ 0 , 0.01 ] 2 \Omega = [0,0.01]^2 Ω=[0,0.01]2 时,PINN直接训练失败了。

让我们再换一个Helmholtz 方程:

− u x x − u y y − k 0 2 u = f , Ω = [ 0 , 1 ] 2 u ( x , y ) = 0 , ( x , y ) ∈ ∂ Ω f ( x , y ) = k 0 2 sin ⁡ ( k 0 x ) sin ⁡ ( k 0 y ) -u_{xx}-u_{yy} - k_0^2 u = f, \qquad \Omega = [0,1]^2 \\ u(x,y)=0, \qquad (x,y)\in \partial \Omega\\ f(x,y) = k_0^2 \sin(k_0 x)\sin(k_0 y) uxxuyyk02u=f,Ω=[0,1]2u(x,y)=0,(x,y)Ωf(x,y)=k02sin(k0x)sin(k0y)

同样对其计算域缩放后训练结果如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

同样的,可以看到,对计算域的缩小确实对网络的训练造成了显著的影响。

讨论

于是我仔细思考了一下,确实应该是解的频率上升,与网络初始化时的频率相差太多导致的问题,具体可以参考一下这篇文章。我发现之前我之前一直没有真正弄清楚所谓的“高频”、“低频”指的是什么。本质上来说,“高”和“低”都是一个相对的概念,我之前并没有建立起一个比较的基准,因此之前的理解更偏向于解在计算域内的频率。但在神经网络中,对于具有相同初始化参数的神经网络,或许可以以这个神经网络初始化时的频率作为比较的基准。那么对于相同的解,对计算域的缩放当然会改变其频率,计算域越小,频率越高;计算域越大,频率越低。

解决方法

解决方法的话,可以分为两种情况:

  1. 解的频率(相对于神经网络)已知,那么可以想办法让神经网络和解的频率尽可能近似,比如对解做仿射变换,也可以利用三角函数对神经网络的频率进行变换,或者把计算域映射到更合适的大小等;
  2. 解的频率(相对于神经网络)未知,那么可以参考上述文章,对解的频率进行预测,然后通过三角函数控制网络初始化时的频率,使其和解尽量相近。
  • 相关代码:PINN_in_small_domain: 关于PDE频率的问题 (gitee.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223499.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python Opencv实践 - 简单的AR项目

这个简单的AR项目效果是,通过给定一张静态图片作为要视频中要替换的目标物品,当在视频中检测到图片中的物体时,通过单应矩阵做投影,将视频中的物体替换成一段视频播放。这个项目的所有素材来自自己的手机拍的视频。 静态图片&…

手机电脑同步的时间管理工具

有不少上班族会发现自己有太多的工作要完成,并且在工作中往往会浪费很多时间在无关紧要的事情上,而不是专注于真正重要的任务,因此没有足够的时间来完成所有任务。在这种情况下,我们可以使用时间管理软件来帮助自己优先考虑重要的…

Flink Flink数据写入Kafka

一、环境准备 flink 1.14写入Kafka&#xff0c;首先在pom.xml文件中导入相关依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><flink.version>1.14.6</flink.version><spark.version>2.4.3</spa…

鸿蒙一出,android开发处境再受重创

华为宣布其自研操作系统鸿蒙HarmonyOSNEXT开发者预览版将不再兼容安卓系统&#xff0c;这一消息引起了广泛关注和热议。这一决策标志着华为正式告别安卓&#xff0c;摆脱了外部的制约&#xff0c;开始着手打造一个全新的生态系统。 鸿蒙系统4发布一个月&#xff0c;截至目前&a…

Java LeetCode篇-深入了解二叉树经典解法(三种方式实现:获取二叉树的最大深度)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 对称二叉树 1.1 判断对称二叉树实现思路 1.2 代码实现&#xff1a;判断对称二叉树 2.0 二叉树的最大深度 2.1 使用递归实现获取二叉树的最大深度思路 2.2 代码实…

书-用数组给已知数组插入某个元素(3)

#include<stdio.h> int main(){int i ;int b[8]{99,65,87,23,44,55};//在87前面插入一个数int n6 ;// 长度for (in;i>3;i--)b[i]b[i-1]; //解释&#xff1a;原来23是第三个位置&#xff0c;但是插入数字后变成了第四个位置//就是把b[4]赋值给b[3];b[2]1000;nn1;//一定…

深入理解MySQL事务隔离级别与锁机制

表锁&#xff1a; 行锁&#xff1a; InnoDB和MyISAM最大的不同有两点&#xff1a; InnoDB支持事务&#xff08;TRANSACTION&#xff09;InnoDB支持行锁 MyISAM在执行查询SELECT前&#xff0c;会自动给涉及的所有表加读锁&#xff0c;在执行update、insert、delete操作会自动…

【多线程】线程的三种常见创建方式

文章目录 线程创建方式1——Thread线程创建方式2——Runnable线程创建方式2——匿名内部类线程创建方式3——Callable、FutureTask,带返回值 线程其实是程序中的一条执行路径。 那怎样的程序才是多线程程序呢&#xff1f; 例如12306网站就是支持多线程的&#xff0c;因为同时可…

ArcGIS Enterprise on Kubernetes 11.1安装示例

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 安装前置条件基本安装解压文件生成秘钥执行安装脚本 配置DNS方法一方法…

算法通关村第二关—K个一组反转(黄金)

K个一组翻转链表 题目介绍 LeetCode25.给你一个链表&#xff0c;每k个节点一组进行翻转&#xff0c;请你返回翻转后的链表。k是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是k的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。进阶&#xff1…

FPGA竞赛_考试赢积分兑换专题课活动

温馨提示&#xff1a;明德扬特别组织了考试竞赛赢积分活动&#xff0c;欢迎大家积极参加考试&#xff01;我是本次活动的负责人小易老师。 一.考试兑换FPGA专题课 1积分1元.可以兑换FPGA专题课&#xff08;例如&#xff1a;拿到1000积分&#xff0c;课程售价999元&#xff0c…

第三方组件自定义扫描规则

第三方例如dubbo自定义扫描组件规则方式注入进容器。例如DubboService注解的类注入进容器中&#xff0c;实现ImportBeanDefinitionRegistrar接口&#xff0c;并通过Import注解注入。 Import除了注入ImportBeanDefinitionRegistrar类&#xff0c;还可以注入配置类Configuration和…

微信小程序音乐播放器

项目预览 项目说明 听歌音乐播放器(小程序)&#xff0c;本项目的目的是为了方便听歌用户&#xff0c;随时随地听歌&#xff0c;不需要下载APP,即用即听 运行项目时&#xff0c;微信开发者工具只需将 dist 文件夹放入即可。另&#xff0c;请将微信开发者工具中的 【不校验合法…

什么是SD-WAN?软件定义WAN是如何工作的?

下午好&#xff0c;我的网工朋友。 宽带接入以及Internet骨干网容量的持续提升&#xff0c;促使企业WAN技术变革。 在已有专线的基础上&#xff0c;SD-WAN提供了一种低成本的快捷方案&#xff0c;正受到业界的追捧。 今天就和你科普一波企业WAN技术的演进&#xff0c;再来说说…

二百一十三、Flume——Flume拓扑结构介绍

一、目的 最近在看尚硅谷的Flume资料&#xff0c;看到拓扑结构这一块&#xff0c;觉得蛮有意思&#xff0c;于是整理一下Flume的4种拓扑结构 二、拓扑结构 &#xff08;一&#xff09;简单串联 1、结构含义 这种模式是将多个flume顺序连接起来了&#xff0c;从最初的sourc…

常见的Bean工厂后置处理器

此代码在jdk11上测试通过&#xff0c;SpringBoot版本为2.7.14 1.上代码 导入坐标 <dependencies><!-- spring数据坐标 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</art…

一文搞懂Git版本控制系统

1. Git简介 当涉及到软件开发或协作时&#xff0c;版本管理是一个不可或缺的概念。无论你是一个独立开发者还是一个团队成员&#xff0c;都会遇到需要跟踪和管理代码变更的情况。这时候&#xff0c;Git作为一个强大而流行的版本控制系统就发挥着重要的作用。 Git&#xff08;读…

wait notify

文章目录 1. API 介绍2. 怎么使用wait、notify2.1 sleep 和 wait 的区别2.2 sleep 和 wait 的使用模板 1. API 介绍 都属于 Object 对象的方法。必须获得此对象的锁&#xff0c;才能调用这几个方法&#xff0c;只有重量级锁才能调用wait、notify obj.wait() 让进入 object 监…

ROS小练习——话题发布

目录 一、话题与消息获取 1、话题 2、消息 二、代码编写 1、C 2、python 三、编译运行 一、话题与消息获取 打开小乌龟案例 1、话题 rqt_graph rostopic list 2、消息 获取消息类型: rostopic type /turtle1/cmd_vel 获取消息格式: rosmsg info geometry_msgs/Twi…

JAVA IO:NIO

1.阻塞 IO 模型 ​ 最传统的一种 IO 模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后&#xff0c;内核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c;用户线程交出 CPU。当…