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

2025.1.19机器学习笔记:PINN文献精读

第三十周周报

  • 一、文献阅读
    • 题目信息
    • 摘要
    • Abstract
    • 创新点
    • 物理背景
    • 网络框架
    • 实验
      • 实验一:直道稳定流条件
      • 实验二:环状网络中的非稳定流条件
    • 结论
    • 缺点及展望
  • 二、代码实践
  • 总结

一、文献阅读

题目信息

  • 题目:《Enhanced physics-informed neural networks for efficient modelling of hydrodynamics in river networks》
  • 期刊: Hydrological Processes
  • 作者: Xiao Luo, Saiyu Yuan, Hongwu Tang, Dong Xu, Qihua Ran, Yuhao Cen, Dongfang Liang
  • 发表时间: 2024
  • 文章链接:https://www.researchgate.net/publication/379763912_Enhanced_physics-informed_neural_networks_for_efficient_modelling_of_hydrodynamics_in_river_networks

摘要

在河网水动力过程研究中,数值模拟是研究常用方法,但存在计算复杂、数据处理等问题。随着计算技术发展,一维水动力模型虽能模拟河网非恒定流,但计算需求有时较高。传统的机器学习算法发展为物理系统建模有着很大的帮助,计算效率高,但存在缺乏物理可解释性、等问题。物理信息神经网络(PINNs)将物理定律引入机器学习,在解决物理的偏微分方程方面有非常大的作用,但目前的PINNs用于河流水动力建模的研究非常有限,特别是在复杂河网的全面应用方面更是少之又少,因此本篇论的目的就是在探索将PINNs应用于河网非恒定流建模,作者过增强PINNs架构,有效模拟具有不规则横截面的真实河网的水动力特性。作者首先对水力参数进行预处理以优化训练速度,同时引入层归一化解决梯度消失问题。此外,还引入了水位范围和节点方程等物理约束确保训练能够有效收敛的同时还加入其他物理约束。最后,作者通过两个实验证明了增强后的PINNs架构能以较少数据预测河网水动力,同时其对时间步长敏感性低,这种PINNs机构是模拟复杂河网水动力过程的有效方法。

Abstract

This article enhances the physics-informed neural networks (PINNs) method to effec-tively model the hydrodynamics of real-world river networks with irregular cross-sections. First, we pre-process hydraulic parameters to optimize training speed with-out compromising accuracy, achieving a 91.67% acceleration compared with tradi-tional methods. To address the vanishing gradient problem, layer normalization is also incorporated into the architecture. We also introduce novel physical constraints—water level range and junction node equations—to ensure effective
training convergence and enrich the model with additional physical insights. Two practical case studies using HEC-RAS benchmarks demonstrate that our improved PINN method can predict river network hydrodynamics with less data and is less sen-sitive to time step size, allowing for longer computational time steps. Incorporating physical knowledge, our enhanced PINN methodology emerges as an efficient and promising avenue for modelling the complexities of hydrodynamic processes in natu-ral river networks.

创新点

  1. 预处理水力参数提升训练速度
  2. 引入层归一化解决梯度消失
  3. 增加水位范围和节点方程等物理约束,确保收敛的同时加入更多物理规律

物理背景

本论文使用一维的Saint-Venant方程作为物理模型,Saint-Venant方程被广泛用于描述河流中的水流。
在这里插入图片描述
这些方程基于质量和动量守恒原理,适用于同一河段的两段之间。
然而,当涉及到河网中的交叉点时,需要替代方程来准确描述这些点的水力条件。
利用质量连续性原理,在没有源或汇的情况下,流入某一点的流体质量必须等于流出该点的流体量。可以直接推导出方程(3)来描述结点处的水力条件:
在这里插入图片描述
Akan和Yen(1981)进行了一项研究,他们在研究中证明,当接点处的流量为亚临界时,能量方程可以用水级相等来近似,在交叉点处,流入和流出的水面高程可以认为是相等的。如式(4)所示:
在这里插入图片描述

网络框架

构建增强型PINNs框架,包括采用全连接深度神经网络近似未知解、预训练水力参数、PINNs近似SVE、增加物理信息(水位软约束和节点方程约束)、选择激活函数与层归一化、特定的模型训练和评估方法。
作者提出的增强型PINN的架构图如下图所示:
在这里插入图片描述
下面我们对作者提出的PINN框架进行分析:

  1. 该论文DNN的结构是一个全连接的前馈神经网络来得出 U ( x , t ) U(x, t) U(x,t) Z ( x , t ) Z(x,t) Z(x,t)的值
    在数学上可以理解为:
    U ( x , t ) ≈ U ^ ( x , t ; θ ) , Z ( x , t ) ≈ Z ^ ( x , t ; γ ) , \begin{array}{l}U(x, t) \approx \widehat{U}(x, t ; \theta),\\Z(x, t) \approx \widehat{Z}(x, t ; \gamma),\end{array} U(x,t)U (x,t;θ),Z(x,t)Z (x,t;γ),
    x = [ x 1 , x 2 , … , x N c ] x = [x_1,x_2,\dots,x_{N_c}] x=[x1,x2,,xNc]表示空间坐标向量,t表示时间坐标向量。 N c N_c Nc为截面总数。 θ θ θ γ γ γ是网络的参数。
    在这里插入图片描述

  2. 此外,作者认为天然的河道是非常复杂的(因为其形状常常是不规则的),因此求解此类系统的SVEs需要根据每个断面的实际地形计算各种中间变量(即为每个横截面计算水力特性)。这种复杂的计算对模型的训练速度造成了很大的影响。
    因此,作者提出一种预训练方法:通过计算横截面的水力参数(如流量面积和水面高程)与横截面几何形状之间的关系来简化计算。
    具体步骤如下:
    首先,作者在训练关键变量之前,对水位进行分层处理,并使用插值函数来近似每个分层水平的水力特征。 然后,预计算的数据集将作为深度神经网络的输入,目的是逼近不同横截面区域的流量面积 A(Z)、河流宽度 B(Z) 和输水能力函数 K(Z)。
    其中:
    A ( Z ) ≈ A ^ ( Z ^ ( x , t ; γ ) , α ) , B ( Z ) ≈ B ^ ( Z ^ ( x , t ; γ ) , β ) , K ( Z ) ≈ K ^ ( Z ^ ( x , t ; γ ) , δ ) , \begin{aligned} &A(Z) \approx \widehat{A}(\widehat{Z}(x, t ; \gamma), \alpha),\\ &B(Z) \approx \widehat{B}(\widehat{Z}(x, t ; \gamma), \beta),\\ &K(Z) \approx \widehat{K}(\widehat{Z}(x, t ; \gamma), \delta), \end{aligned} A(Z)A (Z (x,t;γ),α),B(Z)B (Z (x,t;γ),β),K(Z)K (Z (x,t;γ),δ),
    这些近似值是通过调整 α、β 和 δ来实现。
    获得了近似的流量面积 A ( Z ) A(Z) A(Z),就可以求得 Q ^ ( Z ) \widehat{Q}(Z) Q (Z),其中 Q ^ ( Z ) = A ( Z ) U ^ ( x , t ; γ ) \widehat{Q}(Z)=A(Z) \widehat{U}(x, t ; \gamma) Q (Z)=A(Z)U (x,t;γ)
    在这里插入图片描述

  3. 构建完DNN后,就开始定义损失函数
    首先需要定义式(1)和式(2)的残差项:
    f c ( x , t ) ≈ ∂ Q ^ ∂ x + B ^ ∂ Z ^ ∂ t = f ^ c ( x , t ; θ , γ ) , f m ( x , t ) ≈ ∂ Q ^ ∂ t + ∂ Q ^ U ^ ∂ x + g A ^ ( ∂ Z ^ ∂ x + Q ^ ∣ Q ^ ∣ K ^ 2 ) = f ^ m ( x , t ; θ , γ ) . \begin{array}{l}f_{c}(x, t) \approx \frac{\partial \widehat{Q}}{\partial x}+\widehat{B} \frac{\partial \widehat{Z}}{\partial t}=\widehat{f}_{c}(x, t ; \theta, \gamma),\\f_{m}(x, t) \approx \frac{\partial \widehat{Q}}{\partial t}+\frac{\partial \widehat{Q} \widehat{U}}{\partial x}+g \widehat{A}\left(\frac{\partial \widehat{Z}}{\partial x}+\frac{\widehat{Q}|\widehat{Q}|}{\widehat{K}^{2}}\right)=\widehat{f}_{m}(x, t ; \theta, \gamma) .\end{array} fc(x,t)xQ +B tZ =f c(x,t;θ,γ),fm(x,t)tQ +xQ U +gA (xZ +K 2Q Q )=f m(x,t;θ,γ).
    总体的损失函数如下:
    L ( θ , γ ) = λ u L u ( θ ) + λ z L z ( γ ) + L f ( θ , γ ) , L(\theta, \gamma)=\lambda_{u} L_{u}(\theta)+\lambda_{z} L_{z}(\gamma)+L_{f}(\theta, \gamma), L(θ,γ)=λuLu(θ)+λzLz(γ)+Lf(θ,γ),
    其中 L u ( θ ) L_{u}(\theta) Lu(θ) L z ( γ ) L_{z}(\gamma) Lz(γ)分别用于计算U和Z的真实值与DNN预测值之间的差异。
    L f ( θ , γ ) L_{f}(\theta, \gamma) Lf(θ,γ)是残差的损失项。
    损失函数的具体形式如下:
    L u ( θ ) = 1 N u ∑ i = 1 N u ( U ^ ( x , t ; θ ) − U ) 2 , L z ( γ ) = 1 N z ∑ i = 1 N z ( Z ^ ( x , t ; γ ) − Z ) 2 , L f ( θ , γ ) = 1 N f [ ∑ i = 1 N f f ^ c 2 ( x , t ; θ , γ ) + ∑ i = 1 N f f ^ m 2 ( x , t ; θ , γ ) ] , \begin{array}{c}L_{u}(\theta)=\frac{1}{N_{u}} \sum_{i=1}^{N_{u}}(\widehat{U}(x, t ; \theta)-U)^{2}, \\L_{z}(\gamma)=\frac{1}{N_{z}} \sum_{i=1}^{N_{z}}(\widehat{Z}(x, t ; \gamma)-Z)^{2}, \\L_{f}(\theta, \gamma)=\frac{1}{N_{f}}\left[\sum_{i=1}^{N_{f}} \widehat{f}_{c}^{2}(x, t ; \theta, \gamma)+\sum_{i=1}^{N_{f}} \widehat{f}_{m}^{2}(x, t ; \theta, \gamma)\right],\end{array} Lu(θ)=Nu1i=1Nu(U (x,t;θ)U)2,Lz(γ)=Nz1i=1Nz(Z (x,t;γ)Z)2,Lf(θ,γ)=Nf1[i=1Nff c2(x,t;θ,γ)+i=1Nff m2(x,t;θ,γ)],

  4. 在使用PINN模型预测Z(水位)时会有一个问题:在观测值有限的情况下,预测的水位很可能会出现负值(即低于河床的高度),同时Z的不准确就会导致其他变量(如:A、B、K)不准确。
    为了确保这样错误的计算不会产生连锁反映,在计算水力参数之前,作者对预测的水位值进行了限制(如果它们低于河床高度,就会将其设置为等于河床高度)。但是,这种方法是有缺点的当预测的水位低于河床高度时,对应的偏微分方程会自动简化为零。这并不符合真实的物理规律。
    为了解决这个问题,作者在原来的损失函数基础上加入了一个软约束项,其通过惩罚预测水位超出期望范围的情况来增强模型的物理一致性。通过这种约束的设置,可以让模型的预测结果更加具有科学性。
    L f ( θ , γ ) = 1 N f [ ∑ i = 1 N f f ^ c 2 ( x , t ; θ , γ ) + ∑ i = 1 N f f ^ m 2 ( x , t ; θ , γ ) ] + ω 1 N f ∑ i = 1 N f f s 2 ( x , t ) L_{f}(\theta, \gamma)=\frac{1}{N_{f}}\left[\sum_{i=1}^{N_{f}} \widehat{f}_{c}^{2}(x, t ; \theta, \gamma)+\sum_{i=1}^{N_{f}} \widehat{f}_{m}^{2}(x, t ; \theta, \gamma)\right]+\omega \frac{1}{N_{f}} \sum_{i=1}^{N_{f}} f_{s}^{2}(x, t) Lf(θ,γ)=Nf1 i=1Nff c2(x,t;θ,γ)+i=1Nff m2(x,t;θ,γ) +ωNf1i=1Nffs2(x,t)
    其中ω表示惩罚系数,设为10-5。惩罚系数变大可以直接加强这个约束,从而减少水位超出范围的可能性。
    f s ( x , t ) f_{s}(x, t) fs(x,t)的具体形式为:
    f s ( x , t ) = { Z ^ − Z max ⁡ , if  Z max ⁡ ≤ Z ^ 0 , if  Z min ⁡ ≤ Z ^ < Z max ⁡ Z min ⁡ − Z ^ , if  Z ^ < Z min ⁡ f_{s}(x, t)=\left\{\begin{array}{clc}\hat{Z}-Z_{\max }, & \text { if } & Z_{\max } \leq \widehat{Z} \\0 , & \text { if }& Z_{\min } \leq \widehat{Z}<Z_{\max } \\Z_{\min }-\widehat{Z}, & \text { if } & \widehat{Z}<Z_{\min }\end{array}\right. fs(x,t)= Z^Zmax,0,ZminZ , if  if  if ZmaxZ ZminZ <ZmaxZ <Zmin
    Zmin和Zmax分别为截面的最低点和最高点标高。如果预测的水位超出了期望的范围,这个约束就会起到作用;如果预测的水位在期望范围内,这个惩罚项就会变为零。
    在这里插入图片描述

  5. 网状的河流由多个河道组成,每个河道都有单独的空间坐标。此外,在河道交汇的地方,水流会分成多个部分,这些交叉点在模型中被视为内部边界。在传统的数值模型中,处理这些交汇点会增加模型的复杂性和计算量。但在PINNs中,通过实施“水位相等”原则,增加了结点约束的同时又不会增加模型的复杂性。 这种方法在观测数据缺乏的情况下,降低了无法收敛的风险的同时也提高了预测的准确性。
    作者通过引入了一个与这些结方程相关的约束项 L j ( θ , γ ) L_{j}(\theta, \gamma) Lj(θ,γ),其具体形式如下:
    L j ( θ , γ ) = 1 N j [ ∑ i = 1 N j g ( Z ^ i in  , Z ^ iout  ) ] + 1 N j [ ∑ i = 1 N j ( Q ^ in − Q ^ out  ) ] , L_{j}(\theta, \gamma)=\frac{1}{N_{j}}\left[\sum_{i=1}^{N_{j}} g\left(\widehat{Z}_{i_{\text {in }}}, \widehat{Z}_{\text {iout }}\right)\right]+\frac{1}{N_{j}}\left[\sum_{i=1}^{N_{j}}\left(\widehat{Q}_{\text {in}}-\widehat{Q}_{\text {out }}\right)\right], Lj(θ,γ)=Nj1 i=1Njg(Z iin ,Z iout ) +Nj1 i=1Nj(Q inQ out ) ,
    其中Nj表示河网中结点的总数。 g ( ) g() g()表示满足与连接点相连的横截面上的水位的函数关系。

实验

作者利用HEC-RAS生成训练数据并引入少量随机白噪声(0.2%),采用数值实验,通过RMSE和MAPE评估模型性能。

实验一:直道稳定流条件

实验一的条件是在稳态条件下的单个河流河段。作者通过创建一个受控环境,从而可以对增强后的PINNs方法进行评估。
在这里插入图片描述
在实验一中应用预训练方法评估横截面水力参数,以C1截面为例预训练后DNN预测值与插值计算结果贴合,收敛时达到足够精度,验证了预训练方法的有效性。
其中,图(a)展示了流量面积(A)的真实值和预测值的对比,图(b)展示了图(a)在训练时的损失变化。图©展示了输水能力函数(K)的真实值和预测值的对比,图(d)展示了图(b)在训练时的损失变化。结果表面:
在这里插入图片描述
此外,作者通过不同的观测横截面数量(12、6、4、2)进行训练,评估PINNs在不同数据量下的表现。其中,神经网络架构设为三个隐藏层,每层50个神经元,激活函数采用Tanh,损失函数为均方误差(MSE),并对水位数据集进行z - score标准化。优化策略的初始阶段,AdamW学习率根据Lc的值动态调整,训练共20,000个周期,之后用L - BFGS - B优化器确保收敛。
在不同的横截面数量中,模型的参数如下:
在这里插入图片描述
作者使用12个横截面的观测数据,通过对比HEC-RAS和PINNs的结果,验证PINNs能捕捉到水流横截面内的水文动力特征,包括速度和深度等水动力特性的空间变化和分布。对于Z和U变量,RMSE分别为 2.63 × 1 0 − 3 2.63×10^{-3} 2.63×103 2.97 × 1 0 − 4 2.97×10^{-4} 2.97×104,MAPE分别为0.003%和0.02%,Q的最大绝对误差为 1.83 m 3 / s 1.83 m^{3}/s 1.83m3/s,能量坡度也能准确捕捉水动力过程。
在这里插入图片描述
此外,作者还对预训练对导数计算的影响进行了分析,目的是确定预训练对导数计算精度的影响。 对比有无预训练方法的变量Q和QU的导数计算,发现预训练对导数计算精度影响不大,验证了预训练模型可整合到计算框架中。
在这里插入图片描述
在实验一的最后,作者还对观测横截面数量对模型结果的影响进行了探究。随着用作约束的横截面数量减少,模型的预测精度下降。
实验结果表明,当受6个横截面观测约束时,U的MAPE为7%,Z的RMSE为0.14m;约束为4个横截面观测时,U的MAPE变为20.5%,Z的RMSE为0.36m。在10次实验中,传统神经网络和PINN在不同观测截面数量下进行评估,结果显示随着约束数据减少,两者误差均上升,但PINN在不同约束下表现出更稳定的精度和计算稳定性。
在这里插入图片描述

实验二:环状网络中的非稳定流条件

实验二目的是评估PINNs在捕捉真实世界环形河道系统中复杂的流动模式和边界交互能力。研究背景是在一个环形河道网络中的非稳定流动态。主河道分为两个子河道,然后再下游重新汇合。
如下图所示:
在这里插入图片描述
利用预训练技术,模型增加了河宽作为变量以适应非稳定流条件,从结果来看,模型预测值和实际训练值高度一致,证明了模型的有效性。
在这里插入图片描述
实验二的神经网络包含三个隐藏层,每层30个神经元,激活函数和损失函数分别为Tanh和MSE。AdamW优化器初始学习率为0.001,训练过程中衰减率为0.001,经过20,000次迭代训练达到稳定收敛后,再用L - BFGS - B优化器进行微调。实验二中使用了水位相等约束方程和节点处的流量守恒约束。
参数如下:
在这里插入图片描述
作者在实验二中研究了时间间隔对预测精度的影响。在10分钟内,以不同时间间隔进行实验,该评估显示,数据约束间隔的减少并不会导致预测准确性的明显下降。虽然物理约束可在一定程度上弥补数据稀疏,但数据过度缺乏会使精度有所下降。在 Δ o b s = 10 m i n \Delta obs = 10min Δobs=10min时,U和Z的最大误差分别为0.033m/s和0.018m,相比PINNs在1D稳态明渠案例中的水位误差(可达1m)。
在这里插入图片描述
此外,作者还分析了PDE约束间隔对模型性能的影响。作者通过分析不同时间步长间隔下观测数据和PDE残差约束时26个不同横截面的模型评估指标(U的MAPE和Z的RMSE),结果表明模型在部分组表现较好,部分组精度有不同程度下降,其中数据约束最少的第四组和第八组表现最差,但在一定范围内PDE约束的时间间隔对计算精度影响不明显。
在这里插入图片描述

结论

预训练水力参数可加速训练,新物理约束确保收敛且加深物理理解,增强后的PINNs在河网水动力建模中高效且数据需求少、对时间步长敏感度低。作者通过改进PINNs方法对实际场景中具有不规则横截面的河网水动力进行有效建模。此外,预处理水力参数提升了训练速度的同时也没有牺牲精度,层归一化解决梯度消失问题,新物理约束确保训练收敛并丰富物理内涵。实验表明,改进后的PINNs方法数据需求少,且对时间步长敏感度低,是河网水动力建模的有效方法。

缺点及展望

缺点:
作者提出本论文的实验比较简单,未涵盖真实河网的全部复杂性。此外,使用PINNs处理时间相关PDE时局限于固定时域,无法计算超出边界的解,缺乏泛化能力。
研究展望:
可以将增强后的PINNs架构研究更多河段,验证模型的泛化能力;优化模型种训练算法和网络架构,提升模型的性能;研究在增强后的PINN框架的在实际种的应用,如洪灾防范、水资源和环境保护等。

二、代码实践

在之前我们阅读了一篇PINN求解PDE的论文,其中涉及到使用pytorch实现PINN求解PDE,其中,有一个部分是使用PINN拟合Burgers方程。今天我们就来尝试复现,并了解一下PINNs的代码实现。
代码:https://github.com/jayroxis/PINNs
参考文章:https://blog.csdn.net/qq_42818403/article/details/142685980
Burgers方程是一种经典的非线性偏微分方程,在流体力学、交通流等领域有着广泛的应用。
Burgers方程公式为: u t + u u x = ν u x x , x ∈ [ − 1 , 1 ] , t ≥ 0 u_{t}+u u_{x}=\nu u_{x x}, \quad x \in[-1,1], t \geq 0 ut+uux=νuxx,x[1,1],t0
其中,u 表示速度场,t 为时间,x 为空间坐标,ν 为粘性系数。

如下图所示:
初始时刻u符合sin分布,随着时间推移在x=0处发生间断。这个经典问题,可使用pytorch通过PINN实现对Burgers方程的求解。
在这里插入图片描述
网络架构:

  • 输入: 时间t和空间坐标x(形状均为 ( n , 1 ) (n,1) (n,1))
  • 输出: ( t , x ) (t,x) (t,x)上的解 u ( t , x ) u(t,x) u(t,x)
  • 激活函数: 使用 Tanh 激活函数能够有效处理非线性问题,同时可以使模型生成平滑的函数
  • 边界条件要求: u ( t , − 1 ) = u ( t , 1 ) = 0 , t ≥ 0 u(t,-1)=u(t, 1)=0, \quad t \geq 0 u(t,1)=u(t,1)=0,t0,即 x = − 1 x = -1 x=1 x = 1 x =1 x=1时,解为 0。因此,我们可以通过计算这些边界上的解值,定义边界损失。
  • 初始条件(t=0时): u ( 0 , x ) = − sin ⁡ ( π x ) , x ∈ [ − 1 , 1 ] u(0, x)=-\sin (\pi x), \quad x \in[-1,1] u(0,x)=sin(πx),x[1,1],即 u ( 0 , x ) = − s i n ( π x ) u(0,x)=-sin(πx) u(0,x)=sin(πx)。因此,初始损失通过比较模型预测的解和精确初始条件来定义。
  • 选用7层全连接神经网络,每层包含 100 个神经元,激活函数为 Tanh。该网络能够处理输入的非线性关系,并生成较为平滑的解。

代码实现如下:

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np# 绘制损失曲线
def plot_loss(losses):plt.figure(figsize=(8, 5))plt.plot(losses, color='blue', lw=2)plt.xlabel('Epoch', fontsize=14)plt.ylabel('Loss', fontsize=14)plt.title('Training Loss Curve', fontsize=16)plt.grid(True)plt.tight_layout()plt.show()# 绘制数值解图像
def plot_solution(model):x = torch.linspace(-1, 1, 100).unsqueeze(1)t = torch.full((100, 1), 0.0)  # 在t=0时绘制解with torch.no_grad():u_pred = model(t, x).numpy()# 参考解 u(0,x) = -sin(πx)u_exact = -np.sin(np.pi * x.numpy())plt.figure(figsize=(8, 5))plt.plot(x.numpy(), u_pred, label='Predicted Solution', color='red', lw=2)plt.plot(x.numpy(), u_exact, label='Exact Solution (Initial)', color='blue', lw=2, linestyle='dashed')plt.xlabel('x', fontsize=14)plt.ylabel('u(t=0, x)', fontsize=14)plt.title('Burgers Equation Solution at t=0', fontsize=16)plt.legend(fontsize=12)plt.grid(True)plt.tight_layout()plt.show()
# 绘制整个 (x, t) 平面的解
def plot_solution_3d(model):# 创建 (x, t) 网格x = torch.linspace(-1, 1, 100).unsqueeze(1)t = torch.linspace(0, 1, 100).unsqueeze(1)X, T = torch.meshgrid(x.squeeze(), t.squeeze())# 将 X 和 T 拉平,方便模型预测x_flat = X.reshape(-1, 1)t_flat = T.reshape(-1, 1)with torch.no_grad():u_pred = model(t_flat, x_flat).numpy().reshape(16, 16)# 绘制三维曲面图fig = plt.figure(figsize=(10, 7))ax = fig.add_subplot(111, projection='3d')ax.plot_surface(X.numpy(), T.numpy(), u_pred, cmap='viridis')ax.set_xlabel('x', fontsize=12)ax.set_ylabel('t', fontsize=12)ax.set_zlabel('u(t, x)', fontsize=12)ax.set_title('Solution of Burgers Equation on (x, t) Plane', fontsize=14)plt.show()# 绘制二维等高线图
def plot_solution_contour(model):# 创建 (x, t) 网格x = torch.linspace(-1, 1, 100).unsqueeze(1)t = torch.linspace(0, 1, 100).unsqueeze(1)X, T = torch.meshgrid(x.squeeze(), t.squeeze())# 将 X 和 T 拉平,方便模型预测x_flat = X.reshape(-1, 1)t_flat = T.reshape(-1, 1)with torch.no_grad():u_pred = model(t_flat, x_flat).numpy().reshape(16, 16)# 绘制二维等高线图plt.figure(figsize=(8, 6))plt.contourf(X.numpy(), T.numpy(), u_pred, 100, cmap='viridis')plt.colorbar(label='u(t, x)')plt.xlabel('x', fontsize=12)plt.ylabel('t', fontsize=12)plt.title('Contour Plot of Burgers Equation Solution', fontsize=14)plt.tight_layout()plt.show()# 定义网络结构
class PINN(nn.Module):def __init__(self):super(PINN, self).__init__()self.layer = nn.Sequential(nn.Linear(2, 16), nn.Tanh(),nn.Linear(16, 16), nn.Tanh(),nn.Linear(16, 16), nn.Tanh(),nn.Linear(16, 16), nn.Tanh(),nn.Linear(16, 16), nn.Tanh(),nn.Linear(16, 1))def forward(self, t, x):u = self.layer(torch.cat([t, x], dim=1))return u# 定义Burgers方程中的物理损失
def physics_loss(model, t, x):u = model(t, x)u_t = torch.autograd.grad(u, t, torch.ones_like(t), create_graph=True)[0]u_x = torch.autograd.grad(u, x, torch.ones_like(x), create_graph=True)[0]u_xx = torch.autograd.grad(u_x, x, torch.ones_like(x), create_graph=True)[0]f = (u_t + u * u_x - (0.01 / torch.pi) * u_xx).pow(2).mean()return f# 定义边界条件损失
def boundary_loss(model, t, x_left, x_right):u_left = model(t, x_left)u_right = model(t, x_right)return u_left.pow(2).mean() + u_right.pow(2).mean()# 初始条件损失
def initial_loss(model, x):t_0 = torch.zeros_like(x)u_init = model(t_0, x)u_exact = -torch.sin(torch.pi * x)return (u_init - u_exact).pow(2).mean()# 训练模型并记录损失
def train(model, optimizer, num_epochs):losses = []for epoch in range(num_epochs):optimizer.zero_grad()# 随机采样 t 和 x,并确保 requires_grad=Truet = torch.rand(3000, 1, requires_grad=True)x = torch.rand(3000, 1, requires_grad=True) * 2 - 1  # x ∈ [-1, 1]# 物理损失f_loss = physics_loss(model, t, x)# 边界条件损失t_bc = torch.rand(500, 1)x_left = -torch.ones(500, 1)x_right = torch.ones(500, 1)bc_loss = boundary_loss(model, t_bc, x_left, x_right)# 初始条件损失x_ic = torch.rand(1000, 1) * 2 - 1ic_loss = initial_loss(model, x_ic)# 总损失loss = f_loss + bc_loss + ic_lossloss.backward()optimizer.step()# 记录损失losses.append(loss.item())if epoch % 100 == 0:print(f'Epoch {epoch}, Loss: {loss.item()}')return losses# 初始化模型和优化器
model = PINN()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)# 训练模型
losses = train(model, optimizer, num_epochs = 100000)# 绘制训练损失曲线
plot_loss(losses)# 绘制数值解图像
plot_solution(model)
plot_solution_3d(model)   # 三维曲面图
plot_solution_contour(model)   # 二维等高线图

结果如下图所示:
基本上预测结果能够拟合实际的解,且loss无线接近于0。
通过 PINN 结合自动微分和物理约束,能够高效求解 Burgers 方程这样的非线性偏微分方程。相比传统的数值方法,PINN 具有处理高维问题和复杂边界条件的潜力。
在这里插入图片描述
在这里插入图片描述

总结

本周主要精读了一篇PINN的文献和复现了之前论文的代码。
本周阅读的文献中提出了一种增强型PINNs方法,其通过预处理水力参数、引入层归一化以及增加水位范围和节点方程等物理约束,有效解决了传统PINNs在河网水动力建模中的局限性,且增强后的PINNs架构能够以较少的数据预测河网水动力,且对时间步长的敏感性低,是一种有效的模拟方法。此外,在代码实现部分详细介绍了网络架构的设计、物理损失、边界条件损失和初始条件损失的定义,以及模型的训练过程。
下一周计划阅读timeGan文献。

相关文章:

2025.1.19机器学习笔记:PINN文献精读

第三十周周报 一、文献阅读题目信息摘要Abstract创新点物理背景网络框架实验实验一&#xff1a;直道稳定流条件实验二&#xff1a;环状网络中的非稳定流条件 结论缺点及展望 二、代码实践总结 一、文献阅读 题目信息 题目&#xff1a;《Enhanced physics-informed neural net…...

大文件上传服务-后端V1V2

文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节&#xff0c;把之前做的项目拿过来总结一下&#xff0c;自己写的一个…...

docker 基础语法学习,K8s基础语法学习,零基础学习

下面是关于Docker和Kubernetes的基础语法学习资料&#xff0c;包括一些关键概念和示例代码。 Docker 基础语法 1. 安装 Docker 首先&#xff0c;你需要安装 Docker。以下是不同操作系统上的安装指南&#xff1a; Windows/Mac: 下载并安装 Docker Desktop。 Linux: 根据你的…...

【网络协议】RFC3164-The BSD syslog Protocol

引言 Syslog常被称为系统日志或系统记录&#xff0c;是一种标准化的协议&#xff0c;用于网络设备、服务器和应用程序向中央Syslog服务器发送日志消息。互联网工程任务组&#xff08;IETF&#xff09;发布的RFC 3164&#xff0c;专门定义了BSD Syslog协议的规范和实现方式。通…...

MongoDB深度解析与实践案例

MongoDB深度解析与实践案例 在当今大数据与云计算盛行的时代,NoSQL数据库以其灵活的数据模型、水平扩展能力和高性能,成为处理海量数据的重要工具之一。MongoDB,作为NoSQL数据库的杰出代表,凭借其面向文档的存储结构、强大的查询语言以及丰富的生态系统,赢得了众多开发者…...

C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算

系列文章目录 01-C语言从零到精通&#xff1a;常用运算符完全指南&#xff0c;掌握算术、逻辑与关系运算 文章目录 系列文章目录前言一、C语言的起源与应用领域1.1 C语言的起源1.2 C语言的应用领域1.2.1 操作系统开发1.2.2 嵌入式系统1.2.3 编译器开发1.2.4 游戏开发与图形处理…...

ArkUI概述

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是华为公司推出的一款面向未来、面向全场景的分布式操作系统。它不仅能够支持各种不同的设备&#xff0c;从手机、平板到智能穿戴和智能家居产品&#xff0c;而且为开发者提供了一套统一的开发环境和工具链。对于想要深入鸿蒙开发…...

浅谈计算机网络03 | 现代网络组成

现代网络组成 一 、网络生态体系1.1网络生态系统的多元主体1.2 网络接入设施的多样类型 二、现代网络的典型体系结构解析三、高速网络技术3.1 以太网技术3.2 Wi-Fi技术的深度剖析3.2.1 应用场景的多元覆盖3.2.2 标准升级与性能提升 3.3 4G/5G蜂窝网的技术演进3.3.1 蜂窝技术的代…...

在线图片马赛克处理工具

在线图片马赛克处理工具&#xff0c;无需登录&#xff0c;无需费用&#xff0c;用完就走。 包括中文和英文版本 官网地址&#xff1a; https://mosaic.openai2025.com...

文件上传 分片上传

分片上传则是将一个大文件分割成多个小块分别上传&#xff0c;最后再由服务器合并成完整的文件。这种做法的好处是可以并行处理多个小文件&#xff0c;提高上传效率&#xff1b;同时&#xff0c;如果某一部分上传失败&#xff0c;只需要重传这一部分&#xff0c;不影响其他部分…...

网络安全---CMS指纹信息实战

CMS简介 CMS&#xff08;Content Management System&#xff09;指的是内容管理系统&#xff0c;如WordPress、Joomla等。CMS系统非常常见&#xff0c;几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多&#xff0c;因此黑客将不断尝试利用这些漏洞攻击CMS…...

Ubuntu 24.04 LTS 系统语言英文改中文

Ubuntu 24.04 LTS 修改软件源 Ubuntu 更改软件源 修改语言 无需输入命令&#xff0c;为Ubuntu 24.04系统添加中文智能拼音输入法 在 setting 的 system 中按下图操作 点击“Apply Changes”。需要管理员密码&#xff0c;安装完成后&#xff0c;退出登录&#xff0c;重新登…...

信创在医疗领域的应用:开启医疗信息化新时代

信创在医疗领域的应用&#xff1a;开启医疗信息化新时代 信创在医疗领域的应用&#xff1a;开启医疗信息化新时代信创医疗自助一体机杭医基于信创底座的健康医疗大数据平台厦门大学附属成功医院基于海光CPU的信创改造中科可控基于海光CPU的智慧医疗解决方案 信创在医疗领域的应…...

力扣-数组-303 区域和检索-数组不可变

解析 题目有点费解&#xff0c;大致应该是给出区间内的和&#xff0c;然后维护一个前缀和&#xff0c;为了防止越界&#xff0c;先填一个0进去&#xff0c;在构建的时候也要注意此时构建的dp的下标是i1&#xff0c;所以加的前缀和的下标是i。 代码 class NumArray { public:…...

【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮

1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度&#xff0c;来添加对应的按钮和样式&#xff1b;使用 CSS 的浮动效果&#xff0c;参考CSS 实现超过固定高度后出现展开折叠按钮&#xff1b;使用容器查询 – container 语法&#xff1b;使用 clamp 函数进行样式判断。 3. 优…...

二十项零信任相关的前沿和趋势性技术-MASQUE

影响力评级&#xff1a;较低 市场渗透率&#xff1a;不到目标受众的 1% 成熟度&#xff1a;孵化 定义&#xff1a;基于QUIC加密的多路复用应用程序底层 (MASQUE) 是一个 IETF 标准草案&#xff0c;可实现流量的安全传输和代理。 MASQUE全称为&#xff1a;Multiplexed Appli…...

【Docker】使用Dev Container进行开发

工作区 Dev Container 设置 新建一个文件夹 ./devcontainer 然后下面放 devcontainer.json 然后安装 vscode dev container 插件&#xff0c;然后 CtrlShiftP 启动 Container {"name": "PyTorch-Julia Development","image": "x66ccff/p…...

搭建一个基于Spring Boot的数码分享网站

搭建一个基于Spring Boot的数码分享网站可以涵盖多个功能模块&#xff0c;例如用户管理、数码产品分享、评论、点赞、收藏、搜索等。以下是一个简化的步骤指南&#xff0c;帮助你快速搭建一个基础的数码分享平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个Spring …...

在线json格式化工具

在线json格式化工具,包括中文和英文版本,无需登录&#xff0c;无需费用&#xff0c;用完就走。 官网地址&#xff1a; https://json.openai2025.com 效果如下&#xff1a;...

leetcode300.最长递增子序列

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&…...

【个人学习记录】软件开发生命周期(SDLC)是什么?

软件开发生命周期&#xff08;Software Development Life Cycle&#xff0c;SDLC&#xff09;是一个用于规划、创建、测试和部署信息系统的结构化过程。它包含以下主要阶段&#xff1a; 需求分析&#xff08;Requirements Analysis&#xff09; 收集并分析用户需求定义系统目标…...

CTE与临时表:优劣势对比及使用场景分析

在数据库开发中&#xff0c;尤其是在复杂查询和优化中&#xff0c;**公共表表达式&#xff08;CTE&#xff09;和临时表&#xff08;Temporary Table&#xff09;**是两种常用的工具。尽管它们的功能有些相似&#xff0c;都是为了处理中间结果集&#xff0c;但它们的优劣势和使…...

Kali环境变量技巧(The Environment Variable Technique Used by Kali

Kali环境变量技巧 朋友们好&#xff0c;我们今天继续更新《黑客视角下的Kali Linux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统Kali Linux&#xff0c;我们需要理解和善于使用环境变量&#xff0c;这样会使我们的工具更具便利&#xff0c;甚至具…...

Ubuntu 24.04 LTS linux 文件权限

Ubuntu 24.04 LTS 文件权限 读权限 &#xff1a;允许查看文件的内容。写权限 (w)&#xff1a;允许修改文件的内容。执行权限 (x)&#xff1a;允许执行文件&#xff08;对于目录来说&#xff0c;是进入目录的权限&#xff09;。 文件权限通常与三类用户相关联&#xff1a; 文…...

多个版本JAVA切换(学习笔记)

多个版本JAVA切换 很多时候&#xff0c;我们电脑上会安装多个版本的java版本&#xff0c;java8&#xff0c;java11&#xff0c;java17等等&#xff0c;这时候如果想要切换java的版本&#xff0c;可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…...

AI刷题-最小替换子串长度、Bytedance Tree 问题

目录 一、最小替换子串长度 问题描述 输入格式 输出格式 输入样例 1 输出样例 1 输入样例 2 输出样例 2 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; 二、Bytedance Tree 问题 问题描述 输入格式 输…...

Android 项目依赖冲突问题:Duplicate class found in modules

问题描述与处理处理 1、问题描述 plugins {id com.android.application }android {compileSdk 34defaultConfig {applicationId "com.my.dialog"minSdk 21targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.run…...

Webpack简述

一、为什么要构建工具 人类喜欢书写的代码以及开发方式计算机不喜欢&#xff0c;构建工具的作用就是让人类舒舒服服写自己喜欢的代码&#xff0c;然后一打包生成计算机喜欢的代码 第一个webpack自身仅仅是将我们引入的模块打包成一个文件&#xff08;编译import&#xff09;&am…...

ARM GCC编译器

ARM GCC编译器&#xff08;GNU Compiler Collection for ARM&#xff09;是GNU项目的一部分&#xff0c;专门用于编译针对ARM架构的代码。它是一个开源的工具链&#xff0c;支持多种编程语言&#xff0c;包括C、C和汇编语言。以下是关于ARM GCC编译器的详细解释及其作用&#x…...

CSS3 3D 转换介绍

CSS3 中的 3D 转换提供了一种在二维屏幕上呈现三维效果的方式&#xff0c;主要包括translate3d、rotate3d、scale3d等转换函数&#xff0c;下面来详细介绍&#xff1a; 1. 3D 转换的基本概念 坐标系 在 CSS3 的 3D 空间中&#xff0c;使用的是右手坐标系。X 轴是水平方向&…...

关于 Cursor 的一些学习记录

文章目录 1. 写在最前面2. Prompt Design2.1 Priompt v0.1&#xff1a;提示设计库的首次尝试2.2 注意事项 3. 了解 Cursor 的 AI 功能3.1 问题3.2 答案 4. cursor 免费功能体验5. 写在最后面6. 参考资料 1. 写在最前面 本文整理了一些学习 Cursor 过程中读到的或者发现的感兴趣…...

3. 后端验证前端Token

书接上回&#xff0c;后端将token返回给前端&#xff0c;前端存入cookie&#xff0c;每次前端给后端发送请求&#xff0c;后端是如何验证的。 若依是用过滤器来实现对请求的验证&#xff0c;过滤器的简单理解是每次发送请求的时候先发送给过滤器执行逻辑判断以及处理&#xff0…...

【LLM】Openai-o1及o1类复现方法

note 可以从更为本质的方案出发&#xff0c;通过分析强化学习的方法&#xff0c;看看如何实现o1&#xff0c;但其中的核心就是在于&#xff0c;如何有效地初始化策略、设计奖励函数、实现高效的搜索算法以及利用强化学习进行学习和优化。 文章目录 note一、Imitate, Explore, …...

与“神”对话:Swift 语言在 2025 中的云霓之望

0. 引子 夜深人静&#xff0c;是一片极度沉醉的黑&#xff0c;这便于我与深沉的 macbook 悄悄隐秘于其中。一股异香袭来&#xff0c;恍惚着&#xff0c;撸码中身心极度疲惫、头脑昏沉的我仿佛感觉到了一束淡淡的微光轻洒在窗边。 我的对面若隐若现逐渐浮现出一个熟悉的身影。他…...

设计模式-单例模式

定义 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 类图 类型 饿汉式 线程安全&#xff0c;调用效率高&#xff0c;但是不能延迟加载。 public class HungrySingleton {private static final HungrySingleton instancenew HungrySingleton();private …...

C#枚举类型携带额外数据的方法

Java里面的枚举类型可以定义很多属性&#xff0c;携带各种数据&#xff0c;然而C#里面的枚举类型只能代表数字&#xff0c;不能在枚举类型里面定义各种属性&#xff0c;导致某些应用场景使用起来不方便&#xff0c;但是可以利用C#里面的Attribute来解决这个问题。 例如&#xf…...

跨境电商使用云手机用来做什么呢?

随着跨境电商的发展&#xff0c;越来越多的卖家开始尝试使用云手机来协助他们的业务&#xff0c;这是因为云手机具有许多优势。那么&#xff0c;具体来说&#xff0c;跨境电商使用云手机可以做哪些事情呢&#xff1f; &#xff08;一&#xff09;实现多账号登录和管理 跨境电商…...

RabbitMQ-消息可靠性以及延迟消息

目录 消息丢失 一、发送者的可靠性 1.1 生产者重试机制 1.2 生产者确认机制 1.3 实现生产者确认 &#xff08;1&#xff09;开启生产者确认 &#xff08;2&#xff09;定义ReturnCallback &#xff08;3&#xff09;定义ConfirmCallback 二、MQ的持久化 2.1 数据持久…...

Mybatis plus中的BaseMapper与ServiceImpl

BaseMapper接口方法与ServiceImpl类方法的区别与联系 什么是BaseMapper&#xff1f;什么是ServiceImpl&#xff1f; BaseMapper 是 MyBatis-Plus 提供的一个基础 Mapper 接口&#xff0c;封装了常用的 CRUD 操作方法&#xff0c;如 selectById、insert、updateById、deleteBy…...

第三篇 Avaya IP Office的架构及其服务组成

所谓的架构&#xff0c;其实就是Solution,解决方案。一般就是如下几套&#xff1a; IPO primary IPO secondaryIPO primary IP500v2IPO primary IPO secondary IP500v2IPO primary IPO secondary IP500v2 Expansion Server(IP500v2,扩展)IPO primaryIPO 500v2 简单的解释…...

近红外简单ROI分析matlab(NIRS_SPM)

本次笔记主要想验证上篇近红外分析是否正确&#xff0c;因为叠加平均有不同的计算方法&#xff0c;一种是直接将每个通道的5分钟实时长单独进行叠加平均&#xff0c;另一种是将通道划分为1分钟的片段&#xff0c;将感兴趣的通道数据进行对应叠加平均&#xff0c;得到一个总平均…...

ESP32学习笔记_FreeRTOS(6)——Event and Notification

摘要(From AI): 这篇博客详细介绍了 FreeRTOS 中的事件组和任务通知机制&#xff0c;讲解了事件组如何通过位操作实现任务间的同步与通信&#xff0c;以及任务如何通过通知机制进行阻塞解除和数据传递。博客提供了多个代码示例&#xff0c;展示了如何使用事件组和任务通知在多任…...

多监控m3u8视频流,怎么获取每个监控的封面图(纯前端)

文章目录 1.背景2.问题分析3.解决方案3.1解决思路3.2解决过程3.2.1 封装播放组件3.2.2 隐形的视频div3.2.3 截取封面图 3.3 结束 1.背景 有这样一个需求&#xff1a; 给你一个监控列表&#xff0c;每页展示多个监控&#xff08;至少12个&#xff0c;m3u8格式&#xff09;&…...

ExpGCN:深度解析可解释推荐系统中的图卷积网络

一、引言 在当今信息爆炸的时代&#xff0c;推荐系统已成为电子商务和社交网络中不可或缺的工具&#xff0c;旨在为用户筛选出符合其兴趣的信息。传统的协同过滤&#xff08;CF&#xff09;技术通过挖掘用户与项目之间的交互记录来生成推荐&#xff0c;但这种方法简化了模型&a…...

ChatGPT Prompt 编写指南

一、第一原则&#xff1a;明确的意图​ 你需要明确地表达你的意图和要求&#xff0c;尽可能具体、描述性、详细地描述所需的上下文、你期望的结果等。你的要求越明确&#xff0c;越有希望获得你想要的答案。​ 糟糕的案例 ❌​ ​ 写一首关于 OpenAI 的诗。​ ​ 更好的案…...

【脑机接口数据处理】 如何读取Trode 的.rec文件 原始数据?

文章目录 函数简介文件下载函数语法基本用法带时间跳过的用法带选项参数的用法输出结构使用示例 注意事项 MATLAB中读取Trodes文件的实用函数——readTrodesFileContinuous 在处理神经科学实验数据时&#xff0c;经常会遇到Trodes格式的文件。这些文件包含了丰富的神经信号数据…...

反转字符串中的单词 II:Swift 实现与详解

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

蓝桥杯训练—矩形面积交

文章目录 一、题目二、示例三、解析四、代码 一、题目 平面上有两个矩形&#xff0c;它们的边平行于直角坐标系的X轴或Y轴&#xff0c;对于每个矩形&#xff0c;我们给出它的一对相对顶点的坐标&#xff0c;请你编程写出两个矩形的交的面积 输入格式&#xff1a; 输入包含两行…...

如何设置HTTPS站点防御?

设置HTTPS站点防御涉及到多个层面的安全措施&#xff0c;包括但不限于配置Web服务器、应用安全头信息、使用内容安全策略&#xff08;CSP&#xff09;、启用HSTS和OCSP Stapling等。下面是一些关键的步骤来增强HTTPS网站的安全性&#xff1a; 1. 使用强加密协议和密钥交换算法…...

光谱相机如何还原色彩

多光谱通道采集 光谱相机设有多个不同波段的光谱通道&#xff0c;可精确记录每个波长的光强信息。如 8 到 16 个甚至更多的光谱通道&#xff0c;每个通道负责特定波长范围的光信息记录。这使得相机能分辨出不同光谱组合产生的相同颜色感知&#xff0c;而传统相机的传感器通常只…...