首页/文章/ 详情

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

10月前浏览464

目标  

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

内容介绍

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

   为激活函数,通常情况下激活函数有以下几种,神经网络添加激活函数的原因是,线性函数的叠加无法表示非线性函数,本文采用的是    函数

  • 损失函数
 

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

 

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

 

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

  • 反向传播

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

 

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

 

步骤

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

来源:我的博士日记
非线性UM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-10-31
最近编辑:10月前
此生君子意逍遥
博士 签名征集中
获赞 62粉丝 130文章 153课程 0
点赞
收藏
作者推荐

几何必须位错密度的非局部实现

参考文献:《A non-local methodology for geometrically necessary dislocations and application to crack tips》作者提出了一种把几何必需位错(GND)计算“做成非局部积分”的方法,并嵌入 CPFE(晶体塑性有限元)里:这样既大幅降低了传统局部算法的网格敏感性,又能在裂尖附近给出更符合实验的应力/GND与存储能密度分布,对疲劳寿命预测更靠谱。传统“局部”GND算法对网格尺寸/单元类型高度敏感,在裂尖这种应变梯度巨大的区域,数值场常出现非物理尖峰,进而影响应力与存储能评估。该文章用一个非局部域积分去近似“塑性形变梯度的旋度”并汇聚邻域单元的信息,再解 Nye 张量得到 GND;方法完整的嵌入 CPFE 框架中。非局部的概念图如下:作者通过模拟四点弯曲实验证实了:非局部法让 GND 场更均匀,网格敏感性显著降低。四点弯曲变形下,不同网格密度下的局部和非局部的GND分布情况: 四点弯曲变形下,两类模型的应力分布情况: 可以看到:用邻域信息重算 GND,网格不再主宰结果;数值场回归“物理应有的样子。作者分析认为使用这类方案评估可以提高疲劳寿命的预测精度。此外作者不仅是提出了非局部几何必须位错密度的完整实现,还系统对比非局部域大小、权重衰减等因素对模拟结果的影响,做晶体塑性/疲劳断裂/寿命预测的科研与工程读者,尤其关注“裂尖微观驱动力与路径预测”的同学,可以下载了解完整的数值实现。基于作者提出的数值思路。进行完整的数值实现尝试:建立包含50个晶粒的二维 多晶模型,模拟拉伸变形下局部和非局部几何必须位错密度和应力的分布情况左图局部,右图非局部,可以看到非局部的实现会使得位错密度分布更加平滑,峰值峰值更低。应力分布特征与GND接近局部储能密度分布:该指标通常用于预测疲劳寿命,并基于峰值,这个峰值差异讲直接导致寿命预测的差异,因此使用基于储能的寿命指标,使用非局部模型可以对试样提供更高精度的预测效果(网格依赖性小)来源:我的博士日记

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈