PINN零基础入门指南,附代码(一)
浏览:2242 评论:1
目标
使用最简的神经网络模型来拟合简单函数
。
内容介绍
- 神经网络模型
如上图所示,为最简单的MLP架构(隐藏层的线性简单堆叠,隐藏层的圆圈即表示一个神经元),本文采用一个隐藏层64个神经元,一个输入层一个输出层,表示变量所在层数,和表示变量所在层的位置,表示第层第个神经元的值,所有神经元的和为优化参数下文用指代。
为激活函数,通常情况下激活函数有以下几种,神经网络添加激活函数的原因是,线性函数的叠加无法表示非线性函数,本文采用的是函数
- 损失函数
是需要训练的神经网络参数,是训练结果,是真实结果,本文采用均方误差即:
除此之外也有一些其他的误差形式,这里就不一一举例。损失函数决定了优化目标,优化器通过梯度下降法优化,即:
是步长也叫学习率,当前减去步长乘以梯度就是更新后的参数值,现成的梯度算法工具有很多,本文采用Adam。
- 反向传播
在优化过程中需要对损失函数关于优化参数求导,获得每一个优化参数对损失函数的影响即梯度计算:
具体方法如下图所示,采用链式法则的方法从后往前计算,因此也叫反向传播。
步骤
- 准备训练数据:生成一些样本点
x=torch.linspace(0,1,101).reshape(-1,1) y=torch.sin(x)
- 定义神经网络模型
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)
- 初始化模型,使用均方误差(MSF)损失函数来衡量预测值和真实值之间的差异,选取Adam优化器,更新网络参数,最小化损失函数
model = SimpleNN()#初始化模型 criterion = nn.MSELoss()#均方误差损失函数 optimizer = optim.Adam(model.parameters(), lr=0.001)#Adam优化器
- 开始训练模型
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()#更新参数
- 计算结果
本本文涉及的完整代码,请后台回复关键词" pinn-1" 获取。
感谢每一位朋友的关注!期待能和大家在这个领域携手前行,后续会有更多技术解读和实战技巧分享,我们一起学习,共同成长!~~~🤞🤞🤞
技术邻APP
工程师必备
工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP
2
1




















