主要内容

用L-BFGS解决偏微分方程方法和深度学习

这个例子展示了如何培养物理信息神经网络(PINN)汉堡的方程的数值计算解决方案通过使用内存有限bfg (L-BFGS)算法。

汉堡的方程是偏微分方程(PDE)出现在不同领域的应用数学。特别是,流体力学、非线性声学气体动力学和流量。L-BFGS算法(1)是一种拟牛顿方法接近Broyden-Fletcher-Goldfarb-Shanno(高炉煤气)算法。

考虑到计算域 ( - - - - - - 1 , 1 ] × ( 0 , 1 ] ,这个示例使用一个物理通知神经网络(PINN) [2)和火车一个多层感知器神经网络样本 ( x , t ) 作为输入, x ( - - - - - - 1 , 1 ] 是空间变量, t ( 0 , 1 ] 是时间变量,并返回 u ( x , t ) ,你的解决方案是汉堡的方程:

u t + u u x - - - - - - 0 0 1 π 2 u x 2 = 0 ,

u ( x , t = 0 ) = - - - - - - 年代 n ( π x ) 作为初始条件, u ( x = - - - - - - 1 , t ) = 0 u ( x = 1 , t ) = 0 作为边界条件。

火车的例子执行给定一个输入模式 ( x , t ) ,网络的输出 u ( x , t ) 满足汉堡的方程,边界条件和初始条件。训练该模型不需要提前收集数据。你可以生成数据使用PDE的定义和约束。

生成的训练数据

训练搭配点的模型需要一个数据集执行边界条件,执行初始条件和满足汉堡的方程。

选择25等距的时间点执行每一个边界条件 u ( x = - - - - - - 1 , t ) = 0 u ( x = 1 , t ) = 0

numBoundaryConditionPoints = 25 [25];x0BC1 = 1 * 1 (1, numBoundaryConditionPoints (1));numBoundaryConditionPoints x0BC2 = 1 (1 (2));t0BC1 = linspace (0, 1, numBoundaryConditionPoints (1));t0BC2 = linspace (0, 1, numBoundaryConditionPoints (2));u0BC1 = 0 (1, numBoundaryConditionPoints (1));numBoundaryConditionPoints u0BC2 = 0 (1 (2));

选择50等距的空间指向执行初始条件 u ( x , t = 0 ) = - - - - - - 年代 n ( π x )

numInitialConditionPoints = 50;x0IC = linspace (1, 1, numInitialConditionPoints);numInitialConditionPoints t0IC = 0 (1);u0IC = sin(π* x0IC);

初始和边界条件的数据分组在一起。

X0 = [x0IC x0BC1 x0BC2];T0 = [t0IC t0BC1 t0BC2];情况= [u0IC u0BC1 u0BC2];

选择要执行的输出10000点网络实现汉堡的方程。

numInternalCollocationPoints = 10000;点=兰德(numInternalCollocationPoints, 2);dataX = 2 *点(:1)1;人数(=点(:,2);

定义神经网络体系结构

定义一个多层感知器神经网络架构与9与20隐藏神经元完全连接操作。第一个完全连接操作有两个输入通道对应的输入 x t 。最后完全连接操作有一个输出 u ( x , t )

指定网络hyperparameters。

numLayers = 9;numNeurons = 20;

创建神经网络。

层= featureInputLayer (2);=我= 1:numLayers-1层(层fullyConnectedLayer (numNeurons) tanhLayer];结束层=[层fullyConnectedLayer (1)]
层= 18×1层阵列层:1”功能输入特性2”完全连接20完全连接第三层“双曲正切双曲正切4”完全连接20完全连接层5“双曲正切双曲正切6”完全连接20完全连接层7“双曲正切双曲正切8”完全连接20完全连接层9“双曲正切双曲正切10”完全连接20完全连接层11“双曲正切双曲正切12”完全连接20完全连接层13“双曲正切双曲正切14”完全连接20完全连接层15“双曲正切双曲正切16”完全连接20完全连接层17“双曲正切双曲正切18”完全连接1完全连接层

层数组转换为一个dlnetwork对象。

净= dlnetwork(层)
网= dlnetwork属性:层:[18×1 nnet.cnn.layer.Layer]连接:[17×2表]可学的:[18×3表]状态:[0×3表]InputNames:{“输入”}OutputNames: {“fc_9”}初始化:1观点总结总结。

定义模型损失函数

创建函数modelLoss中列出,损失函数模型结尾部分的例子,以作为输入神经网络,网络的输入,初始和边界条件,并返回梯度的损失对可学的参数和相应的损失。

指定培训选项

火车1500时代,使用默认选项L-BFGS解决状态。

numEpochs = 1500;solverState = lbfgsState;

训练神经网络

把训练数据dlarray对象。指定的输入XT有格式“公元前”(批处理、通道)和初始条件格式“CB”(频道,批处理)。

X = dlarray (dataX“公元前”);T = dlarray(人数(“公元前”);X0 = dlarray (X0,“CB”);T0 = dlarray (T0,“CB”);情况= dlarray(情况,“CB”);

创建一个函数处理的损失函数包含L-BFGS更新。为了评估dlgradient函数内modelLoss函数使用自动分化,使用dlfeval函数。

lossFcn = @(净)dlfeval (@modelLoss净X T X0, T0,情况);

初始化TrainingProgressMonitor对象。因为计时器开始创建监视器对象时,确保你创建对象接近的训练循环。

监控= trainingProgressMonitor (指标=“TrainingLoss”,信息=“时代”,包含=“时代”);

列车网络使用自定义训练循环。在每个迭代中使用完整的数据集。更新网络可学的参数和解决国家使用lbfgsupdate函数。在每次迭代结束时,更新培训进度监控。

i = 1: numEpochs[净,solverState] = lbfgsupdate(网,lossFcn, solverState);updateInfo(监视、时代=我);recordMetrics(监控、我TrainingLoss = solverState.Loss);结束

评估模型的准确性

的值 t 在0.25,0.5,0.75,1,比较深学习模型的预测值与汉堡的真正解决方案的使用的相关方程金宝搏官方网站 l 2 错误。

设置目标时间来测试模型。每一次计算解决方案1001等距的点的距离[1]。

tt = (0.25 0.5 0.75 1);numPredictions = 1001;XTest = linspace (1, 1, numPredictions);XTest = dlarray (XTest,“CB”);

测试模型。

图tiledlayout (“流”)i = 1:元素个数(tt) t = tt(我);tt = t * 1 (1, numPredictions);tt = dlarray (tt,“CB”);%作出预测。xt =猫(1 XTest tt);upr =前进(净,xt);%计算目标。ut = solveBurgers (extractdata (XTest), t, 0.01 / pi);%计算错误。upr = extractdata (upr);呃=规范(upr - ut) /规范(ut);%绘制预测。nexttile情节(XTest upr,“-”、线宽= 2);ylim ([-1.1, 1.1])%的阴谋的目标。持有情节(XTest、ut、”——“线宽= 2)标题(“t =”+ t +”,错误= "+收集(err));结束传奇([“预测”“目标”])

金宝app支持功能

解决汉堡的函数方程

solveBurgers函数返回汉堡真溶液的方程t概述(3]。

函数U = solveBurgers (X, t,ν)%定义函数。f = @ (y) exp (cos(π* y) /(2 *π*ν));g = @ (y) exp (- (y ^ 2) /(4 *ν* t));%初始化解决方案。金宝搏官方网站U = 0(大小(X));%循环/ x值。i = 1:元素个数(X) X = X(我);%计算解决方案使用积分函数。金宝搏官方网站的边界% x = 1和x = 1是已知的,所以离开0%由初始化。如果abs (x) ~ = 1有趣= @ (eta)罪(π* (x-eta)。* f (x-eta)。* g (eta);uxt =积分(乐趣无穷,正无穷);有趣= @ (eta) f (x-eta)。* g (eta);U (i) = uxt /积分(乐趣无穷,正无穷);结束结束结束

损失函数模型

给定一个输入的模型是由执行训练 ( x , t ) 网络的输出 u ( x , t ) 满足汉堡的方程,边界条件和初始条件。特别是,两个量导致损失最小化:

损失 = 均方误差 f + 均方误差 u ,

在哪里 均方误差 f = 1 N f = 1 N f | f ( x f , t f ) | 2 均方误差 u = 1 N u = 1 N u | u ( x u , t u ) - - - - - - u | 2

在这里, { x u , t u } = 1 N u 对应于搭配点的边界计算域和边界和初始条件。 { x f , t f } = 1 N f 在域的内部点。

计算 均方误差 f 要求衍生品 u t , u x , 2 u x 2 输出的 u 的模型。

这个函数modelLoss需要作为输入,网络,网络的输入XT,初始和边界条件X0,T0,情况,并返回损失和损失的梯度对可学的参数。

函数(损失,梯度)= modelLoss(净,X, T, X0, T0,情况)%与初始条件作出预测。XT =猫(1 X T);U =前进(净,XT);%计算衍生品对X和T。gradientsU = dlgradient(总和(U,“所有”),{X T}, EnableHigherDerivatives = true);用户体验= gradientsU {1};Ut = gradientsU {2};%计算二阶导数对X。Uxx = dlgradient(和用户体验,“所有”),X, EnableHigherDerivatives = true);%计算mseF。执行汉堡的方程。f = Ut + U。*用户体验——(0.01. / pi)。* Uxx;zeroTarget = 0(大小(f),“喜欢”f);mseF = l2loss (f, zeroTarget);%计算mseU。执行初始和边界条件。XT0 =猫(1 X0 T0);U0Pred =前进(净,XT0);mseU = l2loss (U0Pred情况);%计算损失最小化,结合错误。损失= mseF + mseU;%计算梯度对可学的参数。梯度= dlgradient(损失、net.Learnables);结束

引用

  1. 刘董C。,Jorge Nocedal. "On the limited memory BFGS method for large scale optimization."数学规划45岁的没有。1 (1989):503 - 528。

  2. 自从Raissi、巴黎Perdikaris和乔治•Em Karniadakis物理深度学习通知(第一部分):数据驱动的解决方案的非线性偏微分方程金宝搏官方网站https://arxiv.org/abs/1711.10561

  3. c . Basdevant m .帝威,p . Haldenwang j . Lacroix j . Ouazzani r . Peyret p . Orlandi接线盒,光谱和汉堡方程的有限差分方法,电脑& 14(1986)23-41液体。金宝搏官方网站

另请参阅

||

相关的话题