PINN零基础入门指南,附代码(一)

目标

使用最简的神经网络模型来拟合简单函数

内容介绍

  • 神经网络模型
  • PINN零基础入门指南,附代码(一)的图1

如上图所示,为最简单的MLP架构(隐藏层的线性简单堆叠,隐藏层的圆圈即表示一个神经元),本文采用一个隐藏层64个神经元,一个输入层一个输出层,表示变量所在层数,和表示变量所在层的位置,表示第层第个神经元的值,所有神经元的和为优化参数下文用指代。

为激活函数,通常情况下激活函数有以下几种,神经网络添加激活函数的原因是,线性函数的叠加无法表示非线性函数,本文采用的是函数PINN零基础入门指南,附代码(一)的图2

  • 损失函数

是需要训练的神经网络参数,是训练结果,是真实结果,本文采用均方误差即:

除此之外也有一些其他的误差形式,这里就不一一举例。损失函数决定了优化目标,优化器通过梯度下降法优化,即:

是步长也叫学习率,当前减去步长乘以梯度就是更新后的参数值,现成的梯度算法工具有很多,本文采用Adam。

  • 反向传播

在优化过程中需要对损失函数关于优化参数求导,获得每一个优化参数对损失函数的影响即梯度计算:

具体方法如下图所示,采用链式法则的方法从后往前计算,因此也叫反向传播。

PINN零基础入门指南,附代码(一)的图3

步骤

  1. 准备训练数据:生成一些样本点 
x=torch.linspace(0,1,101).reshape(-1,1)
y=torch.sin(x)
  1. 定义神经网络模型
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.hidden =nn.Linear(1,64)#隐藏层
        self.output = nn.Linear(64,1)#输出层

    def forward(self, x):
        x=torch.relu(self.hidden(x))#Relu激活函数
        return self.output(x)
  1. 初始化模型,使用均方误差(MSF)损失函数来衡量预测值和真实值之间的差异,选取Adam优化器,更新网络参数,最小化损失函数
model = SimpleNN()#初始化模型
criterion = nn.MSELoss()#均方误差损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001)#Adam优化器
  1. 开始训练模型
num_epochs = 5000#训练5000次
train_losses = []
val_losses = []
for epoch in range(num_epochs):
    model.train()#启用训练模式
    optimizer.zero_grad()#清除梯度
    output_train = model(x_train)#前向传播
    loss_train = criterion(output_train, y_train)#计算训练集损失
    loss_train.backward()#反向传播
    optimizer.step()#更新参数
  1. 计算结果PINN零基础入门指南,附代码(一)的图4

本本文涉及的完整代码,请后台回复关键词" pinn-1" 获取。

感谢每一位朋友的关注!期待能和大家在这个领域携手前行,后续会有更多技术解读和实战技巧分享,我们一起学习,共同成长!~~~🤞🤞🤞

登录后免费查看全文
立即登录
App下载
技术邻APP
工程师必备
  • 项目客服
  • 培训客服
  • 平台客服

TOP

2
1