首页/文章/ 详情

SCI一区论文学习 | 一种用于刀具剩余寿命预测的指数模型

2天前浏览47
 本期给大家推荐一篇SCI一区论文一种用于刀具剩余寿命预测的指数模型。刀具是制造过程的重要组成部分,刀具的退化和磨损将直接影响产品的质量和精度。实施基于刀具状态预测的主动维护策略可以减少昂贵的、计划外的维护事件。因此,论文提出了一种指数模型来预测刀具的剩余使用寿命。构建了一种基于二阶导数的健康指标,并在此基础上提出了一种基于 3𝜎 间隔的首次预测时间自适应选择方法。其次,将贝叶斯推理机制与期望最大化算法相结合,实现了指数模型参数的实时迭代更新。为了在预测剩余寿命时减少随机误差,应用了粒子滤波和概率密度函数来处理预测的不确定性。最后,通过铣削实验验证了所提出的模型对各种切削条件的适应性。

论文链接:通过点击本文左下角阅读原文进行在线阅读及下载

论文基本信息

论文题目:

A novel exponential model for tool remaining useful life prediction  

论文期刊:Journal of Manufacturing Systems  

论文日期:2024年

论文链接:https://doi.org/10.1016/j.jmsy.2024.01.009

作者:

Mingjian Sun  (a), Kai Guo  (a), Desheng Zhang(b)  , Bin Yang (a) , Jie Sun (a) , Duo Li (c) , Tao Huang (d)

机构:

a: Department of Mechanical Engineering, Key Laboratory of High Efficiency and Clean Mechanical Manufacture of Ministry of Education, Shandong University, Jinan 250061, China;  

b: Guangzhou Intelligent Equipment Research Institute Co., Ltd, Guangzhou, China;  

c: Centre for Precision Engineering, Harbin Institute of Technology, Harbin, China;  

d: The State Key Laboratory of Mechanical Transmissions and the College of Mechanical Engineering, Chongqing University, Chongqing 400044, China.

通讯作者邮箱:

kaiguo@sdu.edu.cn

目录

1 摘要
2 引言
理论框架
3.1 指数退化模
3.2 基于粒子滤波的刀具状态预测
3.3 RUL 预测机制
4 预测RUL的指数模型
4.1 特征提取与健康指标构建
4.2 通过监测 SDHI 的 3𝜎间隔的 FPT 自适应选择策略
4.3 刀具剩余寿命预测指数模型
5 实验验证
      5.1 实验装置说明
5.2 FPT自适应选择策略性能评估
5.3 RUL预测方法效果评估

5.4 指数模型泛化能力验证

6 总结

1 摘要

基于切削刀具状态预测的主动维护策略可以减少昂贵的、计划外的维护事件。本研究提出了一种新的指数模型来预测刀具的剩余使用寿命(Remaining Useful Life, RUL)。首先,构建了一种名为二阶导数健康指数(Second-Order Derivative of Health Index, SDHI)的监测指标,并在此基础上提出了一种基于 3𝜎 间隔的首次预测时间( First Predicting Time, FPT)自适应选择方法,将可观测的 SDHI 与不可观测的刀具磨损率相关联,自动判断刀具的异常磨损状态,而无需人工干预。其次,将贝叶斯推理机制与期望最大化(Expectation MaximizationEM)算法相结合,实现了模型参数的实时迭代更新。然后,为了在预测 RUL 时减少随机误差,应用粒子滤波和概率密度函数 ( Probability Density Function, PDF) 来处理预测的不确定性。铣削实验的结果表明,所提出的模型对各种切削条件都有很强的适应性。

关键词:剩余使用寿命,切削刀具,指数模型,首次预测时间,概率密度函数

2 引言

刀具是制造过程的重要组成部分,由于它与工件直接接触[1,2]。因此,刀具的退化和磨损将显著影响产品的质量和精度。有研究指出,刀具故障约占机床总故障的20%[3]。此外,刀具维护费用在总生产成本中占很大比例,从15%到40%不等[4]。实时的对刀具状态进行监测并准确预测剩余使用寿命(Remaining Useful Life, RUL),可以有效防止机床意外停机和工件报废等潜在灾难性事故[5,6]。在线刀具状态监测系统对于现代制造业降低成本和提高加工质量至关重要[9,10]。因此,学者们对切削刀具RUL的预测进行了广泛研究[7,8]。

刀具的 RUL 预测模型主要包括退化模型和数据驱动模型。数据驱动模型通过模式识别和机器学习算法检测系统退化过程[11, 12]。Yu 等人[13]开发了一个双向循环神经网络来预测切削刀具的 RUL。Sun 等人[14]提出了一种利用深度迁移学习和稀疏自动编码器预测刀具 RUL 的方法。此外,基于模糊神经网络[15]、贝叶斯网络[16]、支持向量机[17,18]、相关向量机[19]和随机过程[20,21]的预测方法也常用于RUL预测。数据驱动模型通过学习相关变量与刀具退化状态之间的相关关系来输出预测结果。然而,这些预测的准确性取决于测量数据的数量和质量。这给实际应用带来了重大挑战[22,23]。

退化模型基于领域知识[24]构建精确的失效模型,如Paris、Taylor和Forman裂纹扩展模型[25,26]。因此,这些模型在RUL预测中可能表现出很强的性能。在关于退化模型的各种研究中,指数模型是一种广泛使用的方法。Gebraeel 等人在其发表于 [27] 的著作中首次提出了这一概念。到目前为止,基于指数模型的大量迭代模型已被建立并用于机械系统的 RUL 预测 [28]。Wang 等人[29] 研究了随机噪声对四种退化模型性能的影响: 贝叶斯法 (Bayesian Method, BM)、粒子滤波器 (Particle Filter, PF)、扩展卡尔曼滤波器 (Extended Kalmanfilter, EKF) 和非线性最小平方 (Nonlinear Least Square, NLS)。从实验结果的平均表现来看,前两个基于贝叶斯推理的故障模型明显优于其他两个模型。此外,Liu 等人[28] 建立了基于广义柯西的指数预测模型,利用最大的 Lyapunov 指数揭示了最大 RUL 预测范围,并取得了比长短期记忆的神经网络更高的预测精度。从上述研究中可以看出,指数模型可以成功地预测呈现指数退化过程的系统的 RUL。尽管如此,它们仍然存在一些固有的缺陷。

一方面,在实际生产中,有意义的 RUL 预测往往发生在刀具寿命的中后期阶段 [30]。然而,现有研究通常的做法是主观选择首次预测时间
(First Predicting Time, FPT),从而增加了预测的不确定性。此外,在稳定的切削条件下,刀具的早期磨损退化相对稳定,这使得早期预测切削刀具的剩余寿命大多没有意义。因此,何时开始 RUL 预测仍需进一步分析。图 1 显示了刀具的退化过程,进一步说明了 FPT 的概念。在这个例子中,采用了健康指标的二阶导数Second-Order Derivative of the Health Index, SDHI)作为退化监测的新指标。从本质上讲,刀具退化包括两个阶段:正常磨损异常磨损。正常磨损时,监测指标 SDHI 较低且稳定,表明刀具功能正常。异常磨损时,SDHI 会稳步上升,随后出现剧烈震荡,从而触发退化过程从正常磨损向异常磨损的过渡。监测健康状况是正常磨损阶段的主要目标,当检测到刀具达到异常磨损时,将自动触发 RUL 预测过程,RUL 预测应从 FPT 开始。RUL 预测模型需要一个值得信赖的 FPT,以避免 “预测不足”(对 RUL 的估计过于谨慎)或 “预测过度”(对 RUL 的估计过于保守)。然而,在指数模型中,FPT的选择通常基于主观标准,限制了其潜在用途。Ginart等人[31]总结了在自动健康监测系统中选择FPT的几种常见方法,例如,基于统计特征建立候选基线。然而,FPT是由许多系统的统计数据建立的,因此不能根据单个系统进行自适应调整。

图1 刀具磨损退化过程

此外,指数模型的参数通常是通过实验确定的,而刀具使用前期的可观测数据量较少,导致退化模型参数估计的准确性较低,这使得处理刀具磨损进程的不可预测性成为一项挑战[32]。本文提供了一种新的指数模型来预测切削刀具的 RUL,以克服这些局限性。以下是所提出方法的贡献:

(1) 构建了一种新型健康监测指标 SDHI,并在此基础上提出了一种基于 3𝜎 间隔的 FPT 自适应选择方法,将可观测的 SDHI 与不可观测的刀具磨损率相关联,在无需人工干预的情况下自动判断刀具的异常磨损状态。

(2) 粒子滤波(PF)和期望最大化(Expectation Maximization, EM)算法有效减少了 RUL 预测过程中的随机误差,提高了预测精度。

(3) 采用概率密度函数(Probability Density Function, PDF)来解决与 RUL 预测相关的固有不确定性,从而提高了 RUL 预测的可靠性和可信度。

(4) 通过在各种切削情况下进行的铣削试验,证明了所建议的方法在预测刀具 RUL 方面的通用性。通过误差评估验证了该方法的可行性。

本文的后续部分包括: 第 2 节简要概述了 PF 和指数模型的基本理论框架。第 3 节详细介绍了提出的指数模型。第 4 节通过对不同工件进行铣削试验来评估所建议方法的可行性及其推广到各种切削环境的能力。最后,在第 5 节给出了结论。

3 理论框架

3.1 指数退化模型

指数退化模型广泛应用于轴承和刀具等机械装备的RUL预测。该模型能够有效地捕捉系统的退化趋势[23,33]。在本研究中,每当获得新数据时,模型参数都会通过融合贝叶斯推理与EM算法进行迭代更新。这种方法有助于减少对系统先验信息的依赖。

3.1.1 指数退化模型的发展

考虑在指数模型中通过退化信号来表示刀具的状态,用    表示。刀具在时间    时的状态可以表示为:

 

其中,    是固定的确定性变量,        是随机变量,    服从对数正态分布        服从正态分布        是误差项,其均值为0,方差为    。为方便表示,对指数的模型进行以下对数形式处理:

 

其中,    ,服从正态分布    。为简化分析,假设    

3.1.2 基于EM算法的参数估计

考虑一组在时间    获取的观测值     。假设独立同分布(i.i. d.)的误差项    遵循正态分布,只要知道        ,就可以利用公式 (3) 确定    的条件联合概率密度函数 (PDF)。

 

随后,根据观测数据    推断出    的联合后验概率分布,服从具有后验均值为    ,后验方差为    , 相关系数为    的二元正态分布,其中

 

式中    

通常情况下,通过贝叶斯方法,利用最新的观测数据    来更新每个时间步    的变量        的后验估计值。尽管如此,模型中仍有未确定的参数需要估计,表示为    。为此,我们将采用 EM 算法来估计这些未知参数。考虑    作为第    步的估计,由观测数据    得出。设    ,则后续参数估计如下:

 
 

值得注意的是,传统指数退化模型[27]的先验分布中的方差参数    和参数    是利用离线系统退化数据预先建立的,在整个预测期间保持不变。因此,在这种情况下,RUL 估计值缺乏鲁棒性。而提出的方法利用实时观测数据,通过 EM 算法动态调整参数    ,提高了 RUL 预测的可靠性

3.2 基于粒子滤波的刀具状态预测

粒子过滤(PF),也称为序列蒙特卡洛技术[34,35],使用随机选择的粒子和分配的权重来近似后验 PDF。本研究使用 PF 和贝叶斯推断法递归估计刀具磨损状况。通过最新的观测数据确定模型参数,然后利用这些获得的参数预测刀具未来的磨损状况。

3.2.1贝叶斯推理

提出的状态空间模型被认为能够代表任何给定时刻    的磨损状态    表示为:

 

其中,    是时间    时的刀具磨损状态值(如切削力、刃口磨损等特征值),相当于公式 (1) 中的        是使用一阶马尔可夫过程从状态    转变为    的函数。    是 i.i.d 过程噪音,表示刀具退化过程的不可预测性。该状态空间方程可通过第 2.1 节中给出的指数模型建立。

在铣削加工中,一旦切削刀具的累计磨损量达到预定极限,即被视为失效效,这标志着相应切削刀具寿命的终止点。本研究遵循 ISO3685 标准刀具失效标准(     )。因此,刀具磨损值的评估是预测切削刀具寿命的关键因素。图 2 中突出显示了侧面刃宽,即刀具磨损值    ,这是刀具磨损的主要表现形式。

descript图2 铣削过程中刀具磨损的时变机制示意图

由于缺乏昂贵的离线测量设备(如显微镜或表面轮廓仪),在加工过程中监测刀具磨损以预测 RUL 时可能会遇到困难[36]。因此,预测刀具磨损需要考虑测量误差。在在线测量和不可观测的刀具磨损状况之间建立联系的方程式为:

 

其中,    量化了在线测量值    与不可观测的磨损状态    之间的关系。    是 i.i.d 测量噪声。

利用贝叶斯推理,我们确定了后验 PDF,表示为    ,它基于退化信号的持续更新观测值    ,对应的刀具的未来磨损状况。处理过程通常是迭代进行的,涉及两个不同的阶段,即预测 和 更新。

预测阶段,Chapman-Kolmogorov 方程[34]的操作如下,    时刻状态的    的先验 PDF:

 

其中,状态转换的 PDF    由系统方程公式 (7) 定义。

   时刻的最新测量值    可用时,通过应用贝叶斯规则完成更新阶段。随后,刀具退化状态    的后验PDF可按以下方式计算:

 

其中    作为归一化因子,取决于由式 (8) 中测量方程定义的似然函数     :

随后,将公式 (7) 中的系统方程与公式 (10) 中的后验估计相结合,就得到了    步预测的后验 PDF [37]:

 

3.2.2粒子滤波

公式(12)中,后验 PDF 的迭代传播更具概念性。高维积分的复杂性给分析计算带来了挑战。粒子滤波通过贝叶斯推理提供了一种数值近似方法,被证明是预测后验分布的一种非常有效的方法。具体来说,公式 (12) 的后验 PDF 是通过粒子群    以及相应的权重来近似的:

 

其中,    是粒子的指数,    是粒子的数量,    是三角函数。    是通过粒子的个体状态    和随机过程模型计算得出的:

 

其中    是公式 (7) 中状态转换函数    的逆,而     是过程噪声    的PDF。

当有新的测量结果    出现时,每个粒子都会评估在预期条件下出现该测量结果的可能性。随后,粒子权重会被更新和归一化:

 

3.2.3 重采样步骤

公式 (15) 中更新粒子权重的过程需要计算公式 (10) 中的似然函数,这就带来了粒子贫化的挑战。当迭代几次后,除一个粒子外,其他粒子的权重都可以忽略不计时,就会出现这种现象。

解决方法之一是利用反变换对粒子群进行重新采样[37]。重新采样的基本概念是剔除权重较小的粒子,转而关注权重较大的粒子。这是通过比较累积分布函数(CDF)     与 0 到 1 范围内的阈值来实现的。

粒子贫化通常是通过有效样本大小来评估的[38],在实际计算中可以方便地对其进行近似:

 

   低于预定义阈值    时,根据    的原则、 通过重新采样!    次生成新的粒子集,权重重置为    。在每个离散时间间隔重复上述过程,以获得均匀加权的样本,从而缓解粒子贫化问题。

3.3 RUL 预测机制

一旦确定了    ,就可以根据测量值    得出状态    的估计值。本文的目的是获得    ,首先计算了    的后验分布。然后,将时间    处观察到的退化信号值表示为随机变量    :

 

随后,令    表示时间    时刻刀具的RUL,条件是    ,其中    表示刀具失效的预定阈值。然后就可以推导出给定        的条件 CDF:

 
 

其中,    是标准正态随机变量,    是标准正态随机变量的 CDF。

计算剩余寿命的 CDF 需要评估退化信号    在特定时间点    超过刀具失效阈值    的概率。

给定剩余寿命    的 CDF 和公式 (5) 中的估计参数,我们可以计算剩余寿命     的条件 PDF 如下:

4 预测RUL的指数模型

图 3 中的流程图描述了所以提出的基于指数模型的预测 RUL 方法。首先,从实时退化信号中提取表明刀具退化状态的多域特征。随后,进行特征适配性分析,建立健康指标。然后,根据    间隔自适应选择 FPT。接着,采用指数退化模型对健康指标进行拟合表征。退化模型的参数通过贝叶斯推理和 EM 算法的整合进行迭代更新。最后,的通过粒子滤波技术推断刀具退化曲线来估算刀具磨损状况达到预定的失效阈值    并的时间获得RUL。下文将详细介绍方法的具体实施流程。

descript

图3 提出指数退化模型RUL预测方法流程图

4.1特征提取与健康指标构建

系统状态预测需要建立刀具磨损预测状态演变和测量模型。状态模型源自第 2.1 节中介绍的指数退化模型。同时,利用健康指标(Health Index, HI)建立测量方程。

首先,通过信号采集系统在线采集铣削试验中的三轴切削力、三轴振动和声发射(AE)信号,采样频率分别为 5 kHz、10.24 kHz 和 51.2 kHz。然后从这七个测量信号中提取表 1 所示的多域特征。在时域中,提取了平均值、峰峰值、方差、偏斜系数和峰度系数。方差、偏斜系数和峰度系数是信号离散度的指标,而平均值和峰峰值则是信号幅度和能量随时间变化的特征。

从频域中表示为     的功率谱中提取两个不同的特征:即频带能量和相对功率谱熵。这些特征描述了信号主频带能量的变化。考虑到小波变换在表达信号特征方面的优势特性,提取与处理特征频率相关的能量较高的小波系数的能量作为时频域特征。因此,从每个通道的在线测量中得出了八个不同的特征。

表1 提取的特征列表

descript合适的特征应显示出与磨损退化相一致的趋势。因此,特征相似性分析的主要目的是找出能够恰当捕捉刀具磨损过程细微差别的特征[39]。在退化过程中,刀具磨损会不断加剧。在这种情况下,最佳预测特征应表现出连续增加或减少的明显模式。单调性是一种用于评估特征演变轨迹的数学标准,其正式定义如下[40]:

 

其中,    是测量时间点的数量,    是特征,    指的是特征在相邻时间步之间的差值。本研究中的 HI 是通过识别适应度得分最高的特征来计算的。

通过采用指数平滑方法优化 HI,可以减轻噪声对 RUL 预测的不利影响。指数平滑策略如式 (22) 所示。这里,    表示平滑系数,    对应于观测到的 HI,第一、第二和第三个平滑值分别表示为            。由第三个平滑值得出的时间序列即为最终 HI。本研究采用立方一阶指数平滑法,平滑系数定义为        

4.2 通过监测 SDHI 的 3𝜎间隔的 FPT 自适应选择策略

本节介绍了一种基于    间隔的 FPT 的自适应选择方法。首先,利用正常磨损的历史数据计算 SDHI 的平均值    和标准偏差    ,得出     间隔。随后,将    时刻获取的测量值        间隔进行比较,以确定刀具的正常或异常磨损状态。为减少测量噪声的影响,当累计出现的        超过    间隔时,即判定刀具健康状态异常。此时,预测过程被触发,并使用 HI 来预测 RUL。这个确定的寿命瞬间被称为 FPT,变量表示为     。

这种触发机制的基本原理是,利用可观测的 SDHI 代表不可观测的刀具磨损率。如果 SDHI 偏离    区间,则表明刀具进入以严重磨损为特征的异常状态。此时开始进行参数更新和 RUL 预测序。同时,还要确定预期的退化路径,以及预测 RUL 的置信区间 (CI) 上限和下限:

 
 
 

4.3 刀具剩余寿命预测指数模型

一旦确定了 FPT,HI 将作为退化模型的输入,采用指数模型对刀具的 RUL 进行预测。

首先,将模型参数初始化为    ),        ,    ),     。 其中,模型参数的随机方差很大,表示为        。这样,模型就主要取决于观测到的数据,减少了人为预设先验分布对参数估计的影响。从先验分布    中采样初始粒子    。随后,在获得新的观测数据时,重新计算后验分布    。即每次收集到新的信号观测值时,通过贝叶斯推理(利用式 (4))和 EM 递归更新(利用式 (5) 和 (6))获得模型参数的估计值以更新刀具的 RUL 分布。即更新式 (19)函数         和    的值。该过程根据式 (18) 中预先确定的刀具失效阈值    计算 RUL 的 CDF。然后,使用粒子滤波法估算出式 (20) 中的刀具状态后验 PDF。表 2 全面概述了利用指数模型预测 RUL 的过程。

表 2 指数模型预测 RUL 的过程descript

5 实验验证

在两种铣削情况下进行的加工测试证明了该方法的有效性。这两种加工情况下的工件、刀具和切削参数完全不同,如表 3 所示。首先使用 PHM 2010 挑战数据集 [41,42],对铣削传统工件的刀具寿命进行估算。然后,通过不同切削环境下的实验数据,预测了铣削钛合金工件时铣刀的 RUL,并验证了该方法在实际加工环境中的通用性和适用性。

表3 铣削实验的加工参数

descript

5.1 实验装置说

如图 4 所示,在整个切削操作过程中,利用力传感器、加速度传感器和声发射传感器同时采集切削力、振动和声发射数据。信号采样频率为 50 kHz,所有输出均通过电荷放大器和 NI DAQ PCI 信号采集卡传输到计算机进行存储。表 3 中的案例 1 显示了实验的具体细节。每个刀具被铣削 315 次,每次铣削操作后都使用 LEICA MZ12 显微镜测量磨损情况。使用刀具 C1、C2、C4 和 C6 的切削数据对案例 1 进行了验证。

descript

图4 案例 1 的实验装置

此外,钛合金零件具有强度高、韧性强、防锈性好等优点,因此在飞机制造业中被大量使用[43]。然而,与钢和铝等传统铣削材料相比,钛合金材料的导热率较低。切削时散热和冷却效果差,容易在切削区域产生危险的高温,从而加速刀具磨损。由于铣削钛合金零件的复杂性,我们使用钛合金零件的加工数据对所建议的方法进行了进一步测试。在加工钛合金零件的情况下验证了提出的指数模型的在实际加工环境中的适应性。铣削实验在 DECKEL MAHO DMU 70 V 加工中心上进行。工件材料为 Ti-6Al-4V,尺寸如下: 177 mm × 40 mm × 112 mm,铣刀为直径为 𝜑 = 10 mm 的金刚石涂层石墨四刃平面铣刀,具体的工艺参数在表 3 中的工况 2 中进行了说明。

如图 5 所示,加工过程中通过力、加速度和声音采集系统采集三轴切削力、机床主轴振动和切削声音信号。力采集系统包括奇石乐传感器刀架、无线传输模块和可视化软件,采样频率为 5 kHz。加速度采集系统由三轴压电加速度计(Kistler-8763B)、NI cDAQ-9171 采集板和可视化软件组成。加速度计使用磁性底座固定在机床主轴上,采样频率为 10.24 kHz。声音采集系统由麦克风(GRAS 46AE)、NI cDAQ-9171 采集板和可视化软件组成。麦克风使用磁性支架固定在工作台上,直接指向切割区域,采样频率为 51.2 kHz。具体细节将在第 5.4 节中详细介绍。

descript

图5 案例 2的实验装置

5.2 FPT自适应选择策略的性能评估

本文首先基于实例 1 阐述了SDHI构建和 FPT 自适应选择策略实施的具体过程。案例 1 中刀具 C1 的侧面磨损曲线如图 6(a)所示,包括三个切削刃各自的磨损值和平均磨损量。刀具的磨损退化过程与典型的泰勒刀具寿命曲线[5]一致。因此,根据观察到的刀具磨损变化,将磨损状况分为三种不同的状态:初始磨损、正常磨损和严重磨损。图 6(b) 显示了整个磨损过程中的磨损率变化。图 6(a) 所示的磨损曲线和图 6(b) 所示的磨损率可用于定义磨损状态:在铣削过程的第 0 至第 28 刀期间,为初始磨损,刀具处于快速磨损阶段。在第 28 刀之后,磨损率曲线发生了明显变化,磨损率开始下降,刀具呈现出持续的渐进磨损。因此,从第 29 刀到第 135 刀的铣削过程属于正常磨损阶段。从第 136 刀到第 315刀随着切削次数的增加,刀具磨损率继续增加。此时,刀具进入加速磨损阶段,属于异常加工状态。刀具进入异常加速磨损阶段后,切削刃的加工状态非常不稳定,极易损坏加工零件表面,甚至导致零件报废[44]。因此,必须准确识别刀具达到异常磨损状态的时刻,选择合适的 FPT、估计刀具状态并预测 RUL。根据预期的健康状况及时更换刀具。

descript

图6 刀具磨损趋势和刀具磨损状况的划分依据

然而,由于测量噪声的存在,准确建立原始数据与刀具退化之间的相关关系是具有挑战性的。为此,我们从原始信号中提取如表1中所列的多位特征。然后,进行了特征拟合度分析,以确定哪些特征对磨损过程最为重要。提取特征的适配度得分排序如图 7 所示。特征拟合度分析结果表明,X轴切削力信号的方差拟合度最好,单调性得分为 0.998,因此选择X轴 切削信号力的方差作为 HI 来表征刀具的磨损过程。通常情况下,单调性对噪声不具有鲁棒性[40],因此提取的特征会通过公式 (22) 所描述的立方一阶指数平滑滤波器进行平滑处理。图 8(a) 展示了平滑前后的 HI。可以看出,平滑后的 HI 是单调的,这符合刀具累积磨损的物理规律。

descript

图7 多域特征适应度评估

图8(b)显示了试验中C1的平均磨损率和SDHI。图中,紫色实线表示平均磨损率,红色虚线表示正常磨损和异常磨损之间按磨损率划分的线,蓝色实线表示SDHI。可以看出,当工具处于正常阶段时,SDHI的振幅通常较低且稳定,完全包含在    区间内,当SDHI超过    区间时,其振幅开始迅速增加并产生剧烈波动,表明刀具磨损已达到严重程度。通过在SDHI超过    的位置添加分界线(图中的绿色虚线),可以发现SDHI对刀具磨损状态转变的敏感性使其能够有效区分刀具的正常磨损和严重磨损。

因此,SDHI对刀具的早期异常状态很敏感,可用于触发RUL预测过程,但不能提供有关磨损后期发展的有效信息。从图8(a)中的可以看出,HI在FPT后显示出明显的指数增长,这很好地表征了刀具的磨损退化过程,可用于预测RUL。因此,采用SDHI作为监测指标和HI作为预测指标。

descript

图8 健康指标构建和FPT选择结果

为了进一步验证自适应FPT选择策略的有效性,将两个刀具C4和C6的真实FPT与根据    间隔选择的FPT以及Ginart等人提出的FPT选择方法进行了比较[31]。比较结果如图9所示,FPT的值如表4所示。从图9可以看出,由于磨损过程的随机性和不确定性,使得准确识别刀具C4和刀具C6异常状态的初始时刻具有挑战性。与Ginart的方法相比,我们的方法确定的FPT更接近真实时刻。此外,如图9所示,通过合适的触发机制,令    , 即当累积10个SDHI超过    隔时,刀具退化被认为进入异常状态,如图中紫色阴影的方块所示。因此,我们的方法具有很强的抗干扰效果,可以避免由于噪声干扰而导致的前几个错误FPT,从而选择更接近实际异常状态发生时刻的FPT

descript

图8 FPT选择结果(a)刀具C4,(b)刀具C6

表4 3把刀的FPT选择结果

descript

为了进一步证明SDHI作为监测刀具异常磨损状态的指标的合理性,以刀具C1、C4和C6为例,图10-12分别显示了使用HI的原始值、HI的一阶导数(FDHI)、HI的三阶导数(TDHI)和HI的四阶导数(FDHI)通过    间隔策略选择FPT与由刀具磨损率确定的真实FPT的结果。图13提供了使用不同监测指标(包括HI、FDHI、SDHI、TDHI和FDHI)选择的FPT的误差比较图。由于HI和FDHI的原始值对高频退化信号不太敏感,因此很难揭示真实的磨损状态。因此,通过监测HI和FDHI选择的FPT与真实FPT存在显著偏差,这将导致RUL预测过程提前触发并产生较大的预测误差。相反,通过设置合适的抗噪声干扰机制,TDHI和fDHI在刀具的早期异常磨损阶段对高频故障信号表现出更高的灵敏度。可以更准确地反映刀具发生异常磨损状态的具体时刻。图13中的FPT选择误差比较结果也证实了SDHI、TDHI和fDHI作为监测指标的优越准确性。从监测精度的角度来看,SDHI、TDHI和fDHI这三个高阶导数都可以作为自适应跟踪刀具异常磨损状态的有效监测指标。然而,考虑到计算效率,SDHI最终被选为首选监测指标。

descript图10 分别使用HI、FDHI、TDHI和FDHI对刀具C1的FPT结果进行比较

descript

图11 分别使用HI、FDHI、TDHI和FDHI对刀具C4的FPT结果进行比较descript

图12 分别使用HI、FDHI、TDHI和FDHI对刀具C6的FPT结果进行比较

descript图13 分别使用HI、FDHI、SDHI、TDHI和FDHI选择的FPT误差的比较

5.3 RUL预测方法效果评估

在选择FPT后,应用了具有1000个粒子的指数模型RUL预测方法,并使用HI作为预测指标来预测RUL。图14显示了EM参数更新过程。在预测过程开始时,并非所有参数都能准确估计。随着参数估计中使用的观测值数量的增加,这些参数的估计值逐渐接近其真实值。相比之下,Gebraeel的方法[27]不能像所提出的方法那样自适应地调整实时观测数据。

descript

图14 RUL预测过程中的参数估计 

图15(a)显示了刀具C1在监测时间    时的完整退化预测过程。首先,对蓝色实线所示的HI观测值进行三次一阶指数平滑,以减少测量噪声干扰,并获得平滑的退化轨迹,如绿色实线所示。接下来,使用式(23)中的指数退化模型来拟合所获取的退化轨迹,以获得退化模型曲线,如橙色实线所示。然后,外推所获得的退化模型曲线以预测未来的HI值。一旦预测的HI达到磨损阈值,则认为该刀具不可用,并计算此时的RUL,记为    。此外,当相应的CI边界外推到故障阈值时,可以分别通过式(24)和(25)计算出RUL的上限    和下限    

此外,图15(b)-(d)显示了监测时间    时刀具C2、刀具C4和刀具C6的退化预测结果。外推轨迹曲线以获得预测的HI值,HI值由虚线表示,CI由阴影区域表示。通过计算当前监测时间和预测的HI达到故障阈值之间的时间间隔,可以在每个监测时间很容易地进行RUL的估计。

descript

图15 案例1在时时的刀具退化过程和退化趋势预测结果

图16(a)-(d)描述了刀具C1、C2、C4和C6的RUL预测结果,精度为        精度决定了特定时间点    的预测精度,其是否达到所需的精度水平    。对应于        区由绿色虚线表示。 这里    由SDHI的    间隔内监测的FPT指定。很明显,在FPT之前的一段时间内,预测误差要大得多。这是由于在监测FPT之前,刀具处于正常磨损阶段,退化速度较慢,观察到的HI包含的有用信息较少,导致退化模型参数的估计较差。然而,随着磨损状态的加剧,当监测时间到达FPT时,它标志着刀具开始进入指数状退化的异常磨损阶段,预测的退化轨迹与实际退化趋势更加吻合,因此预测的RUL逐渐向真实值收敛。

此外,使用概率方法对RUL不确定性进行量化。图16(a)中的青色阴影部分表示RUL的PDF,用于评估RUL预测的置信区间。RUL的PDF越窄,表示预测置信度越高,PDF的峰值对应于RUL的估计值。如图16(a)所示,在FPT时刻,通过选择最高概率,使用新型指数模型估计的RUL约为165刀,而实际剩余使用寿命约为175刀。

descript

图16 案例1使用的提出的方法的RUL估计结果

descript

图17 案例1使用的原始指数模型的RUL估计结果

descript

图18 案例1使用的Paris模型的RUL估计结果

此外,通过与原始指数模型(图17)和Paris模型(图18)的RUL预测结果进行比较,以及对这三种不同算法预测的RUL误差进行总体比较。为了进一步证明所提出方法的优越性。通过MAE和RMSE定量评估模型的预测表现。

 
 

其中    是预测的数量,    是预测的剩余寿命预测结果,    是实际的剩余寿命。

从结果中可以看出,尽管所提出的方法在刀具C4的RUL预测结果精度略低刀具C1、C2和C6,但它仍然明显优于其他算法证实了所提出方法在预测刀具剩余寿命的优越性。表5和图19显示了从FPT到终止时刻的三种算法预测的RUL得分。为简单起见,三种算法的MAE和RMSE分别用ER1-ER6表示,例如,ER1代表指数模型预测的MAE,ER2代表指数模型预测的RMSE,以及ER3和ER4分别表示Paris模型的MAE和RMSE。然后,ER5和ER6代表拟议算法的MAE和RMSE评分指标。

相较于第二种方法中,我们的方法对主观因素的依赖程度较低,RUL预测结果更可靠、更一致。因此,可以得出结论:提出的指数模型将贝叶斯更新和EM方法用于参数估计的优点与粒子滤波器用于状态估计的优点相结合,并在三种模型中显示出更好的预测效果。

descript

图19 这三种方法的性能定量比较结果

5.4 指数模型泛化能力的验证

如第4.1节所述,通过预测钛合金部件铣削过程中的刀具寿命,验证了所提出的方法对加工环境的泛化能力。钛合金零件的铣削实验使用2个相同的刀具,每个刀具用于60次切削,在每次数据采集实验后使用Dino Lite AM3113数字显微镜测量刀具磨损。共获得了2组切削信号和磨损值数据。将每个刀具的磨损数据视为一个单独的数据集,分别表示为T1和T2。钛合金零件每次切削后各切削刃的侧面磨损和平均磨损如图20所示

descript

图20 案例2中每个刀具的后刀面磨损过程

RUL的预测方法与案例1相同,刀具T1和T2的FPT由提出的    间隔策略获得,分别为40次和36次切削。图21和22显示了从监测到FPT起始预测的两个刀具的RUL预测结果。研究结果表明,所提出的方法精确地预测了钛合金零件铣削过程中的刀具RUL,证明了其对加工条件的通用性,并验证了其对传统加工和具有挑战性的钛合金零件加工的适用性。这有两个原因:第一:提出的FPT自适应选择策略与刀具磨损过程相关,可以在更合适的时刻触发退化过程,减少预测过程中的不确定性。其次,使用概率密度函数来估计刀具的健康状态,从而减少随机过程的随机误差。因此,尽管两种情况的处理条件完全不同,样本量相差5倍以上,但所提出的模型仍然具有良好的预测精度。

descript

图21 案例2中刀具T1铣削Ti-6Al-4V零件的RUL预测结果

descript图22 案例2中刀具T2铣削Ti-6Al-4V零件的RUL预测结果

6 结论

本文提出了一种基于指数模型的刀具RUL预测方法,以解决RUL预测中健康指标构建和预测不确定性量化两个问题。以下是这项工作的主要贡献:

(1) 构建了一种与退化过程的不可观测刀具磨损率相关的新型可观测健康监测指标SDHI,用于监测异常刀具磨损状态,并提出了一种基于    区间的FPT自适应选择方法,用于在没有人为干预的情况下自适应地触发退化模型参数更新和RUL预测过程。
(2)  通过采用概率方法来表征刀具磨损过程,该方法依赖于粒子滤波来有效处理固有的不确定性,从而提供更多的统计信息来提高RUL的预测可靠性和置信度。
(3) 通过PHM2010公开数据集和钛合金零件铣削实验,验证了该方法的有效性。实验结果表明,该方法不仅适用于铣削传统工件的刀具寿命预测,也适用于难加工钛合金工件的铣刀寿命预测。
(4) 为了说明由新型健康指标SDHI执行的自适应FPT选择方法的优点,将其与由实际刀具磨损率确定的FPT进行了比较。研究结果表明,所采用的方法成功地抑制了随机噪声干扰,并选择了更接近实际异常状态的FPT。
(5) 为了说明粒子滤波状态估计的有效性,对提出的方法、原始指数模型和Paris模型进行了评估。研究结果表明,该方法可以成功地减轻随机过程中的随机误差,从而提高刀具RUL预测的精度。

本研究中提出的方法建议用于以系统退化信号呈指数趋势为特征的RUL预测场景。这是因为指数退化模型基于以指数函数形式跟踪退化信号轨迹的基本原理,因此当系统或构建的健康指标的退化信号呈指数增加或指数减少形式时,所提出的方法将很好地工作。当然,该方法仍有一些局限性。例如,特征适应度分析的目的是找到一个具有指数单调趋势的健康指标。但是,在某些实际情况下,退化趋势可能是非单调的,甚至会突然变化,例如刀具的碎裂和边缘断裂。在这种情况下,所提出的方法无法有效预测刀具的未来退化趋势。未来,将开发出更稳健的退化模型,不仅能够描述单调的磨损退化趋势,而且能够描述非单调或突然的退化趋势。


编辑:Tina

校核:李正平、陈凯歌、赵栓栓、曹希铭、赵学功、白亮、任超、陈宇航、海洋、陈莹洁、王金、赵诚、肖鑫鑫

该文资料搜集自网络,仅用作学术分享,不做商业用途,若侵权,后台联系小编进行删除

点击左下角阅读原文,即可在线阅读论文。


来源:故障诊断与python学习
ACTMechanicalSystem振动断裂非线性旋转机械通用航空python海洋声学裂纹理论电机材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-04-12
最近编辑:2天前
故障诊断与python学习
硕士 签名征集中
获赞 77粉丝 102文章 183课程 0
点赞
收藏
作者推荐

手把手教你安装GPU版Pytorch环境及手把手带大家跑通第一个故障诊断案例!!!(下)

故障诊断方向而言,无论是信号处理、特征提取、故障分类还是寿命预测,所有的方法实现基本都依靠于Python代码,很多小白遇到的第一个拦路虎便是代码环境的配置。Pytorch是Python第三方库的一种,里面包含很多深度学习机器学习的函数,Pytorch本身有两个版本,一个是简便的CPU版本,一个是高速高效的GPU版本。另外代码编辑器可以直接用于编写、编辑和运行代码。它们提供了代码高亮、自动补全、代码调试、版本控制集成等功能,以提高开发效率和代码质量,也是故障诊断相关代码的必备工具之一。本期给大家带来Pytorch环境(Anaconda)安装教程,并附带代码编辑器配置过程。每一部分内容都附带推荐的视频教程以及教程链接,保证每一位故障诊断学习者都能搭建自己的代码平台。此外,后续文章还手把手带大家跑通第一个故障诊断案例,代码包含数据处理,1DCNN模型搭建,模型训练,以及模型评估等故障诊断完整过程,特别适合研一、研二小白入门。 本期涉及代码非常详细,所占篇幅也非常多,所以分三次呈现给大家,第1篇文章主要介绍主要介绍了Python环境以及各个软件环境安装【初学者必看教程 | 手把手教你安装GPU版Pytorch环境及手把手带大家跑通第一个故障诊断案例!!!(上)】。第2篇文章主要介绍西储大学数据集以及一些所需深度学习基础知识,文章后半部分讲解了本期代码的数据预处理以及数据切割等部分【初学者必看教程| 手把手教你安装GPU版Pytorch环境及手把手带大家跑通第一个故障诊断案例!!!(中)】。本篇为第3篇文章主要构建1DCNN模型框架以及模型训练模型检测等内容。数据集下载:通过点击最左下角的阅读原文进行下载。目录1 引言2 安装Anaconda 2.1 Anaconda介绍 2.2 Anaconda安装3 配置Pytorch环境(CPU版) 3.1 Pytorch介绍 3.2 Pytorch配置教程(CPU版)4 配置Pytorch环境(GPU版) 4.1 两种Pytorch区别(看是否支持GPU) 4.2 CUDA安装 4.3 Pytorch配置教程(GPU版)5 配置代码编辑器 5.1 代码编辑器区别 5.2 VScode编辑器 5.3 Pycharm编辑器 5.4 JupyterNotebook编辑器6 故障诊断代码示例 (重中之重) 6.1 代码介绍 6.2 检验Pytorch 6.3 故障诊断实战代码(模型构建及训练测试部分)注:小编能力有限,如有不恰之处,请多多指正~1 引 言在学习故障诊断相关代码时,拥有一个强大且灵活的开发环境是至关重要的。Anaconda和Pytorch正是这样的工具,它们为我们提供了一个完整的生态系统,用于进行数据分析、模型训练和部署,是目前常用的工具软件资源。虽然网上Anaconda及Pytorch安装教程资源比较丰富,但对一些细节部分,比如在安装GPU版本的Pytorch时,是否需要安装CUDA、以及如何查看CUDA版本等问题上仍存在一些歧义。本文将用通俗易懂的语言及方法带大家了解这些概念,并选择自己最合适的方法。此外,本文提供了下载GPU版Pytorch的快捷方式,以及通俗易懂的视频教程链接,为读者朋友们在安装过程中尽可能带来更多的便利。本期第2篇、第3篇提供了故障诊断实例以及学习代码的必备基础知识,代码包含数据处理,1DCNN模型搭建,模型训练,以及模型评估等故障诊断完整过程,为读者朋友们提供了基本的代码框架。总的来说,本期文章旨在为初学者及入门小白提供一个全面的指南,第1篇科普一些基本概念的同时,提供详细操作过程,帮助大家安装和配置Anaconda环境,以及在该环境中配置Pytorch(包含CPU和GPU两种版本)。此外,本期第2篇、第3篇还带大家学习一个完整故障诊断代码示例,深入学习故障诊断代码的各个框架,为接下来学习打下夯实的基础。无论您是在寻找一个全新的开发环境,还是希望优化现有的工作流程,本期文章都将为您提供必要的指导和资源。6 故障诊断代码示例6.1 代码介绍6.1.1 代码流程数据提取部分代码,把.mat文件中正常数据和12kHz驱动端数据提取成Datafram格式,接着通过预处理将数据划分为长度1024、重叠率0.5的多个样本。并转化为适合深度学习的tensor格式。模型搭建部分构建了1DCNN模型框架,然后模型训练部分调用基本1DCNN模型框架以及训练集验证集通过多次训练生成最佳模型,最后模型测试部分加载最佳模型和测试集并通过准确率,召回率,混淆矩阵等多指标检验模型效果。6.1.2 基础知识6.2 检验Pytorch6.3 故障诊断实战代码6.3.1 数据预处理注:第6节上半部分在上一篇【初学者必看教程| 手把手教你安装GPU版Pytorch环境及手把手带大家跑通第一个故障诊断案例!!!(中)】可查看。6.3.2 模型搭建 该部分定义VGG1DModel 模型,通过 CNN 部分提取输入数据的局部特征,然后通过自适应平均池化层将特征压缩为固定长度的向量,最后通过全连接层将特征映射到分类结果。这种结构适用于处理一维数据的分类任务,能够有效地捕捉数据中的特征并进行分类。代码分成:类定义和初始化、CNN 卷积池化结构构建、前向传播、模型实例化。import torchfrom joblib import dump, loadimport torch.utils.data as Dataimport numpy as npimport pandas as pdimport torchimport torch.nn as nn# 定义VGG-1D模型class VGG1DModel(nn.Module): #类定义和初始化 def __init__(self, batch_size, input_channels, conv_archs, num_classes): super(VGG1DModel, self).__init__() self.batch_size = batch_size # CNN参数 self.conv_arch = conv_archs # 网络结构 self.input_channels = input_channels # 输入通道数 self.features = self.make_layers() # 自适应平局池化 在这里做了改进,摒弃了 大参数量的三层全连接层,改为自适应平均池化来替代 self.avgpool = nn.AdaptiveAvgPool1d(1)# # 定义全连接层 self.classifier = nn.Linear(conv_archs[-1][-1], num_classes) # CNN卷积池化结构构建 def make_layers(self): layers = [] for (num_convs, out_channels) in self.conv_arch: for _ in range(num_convs): layers.append(nn.Conv1d(self.input_channels, out_channels, kernel_size=3, padding=1)) layers.append(nn.ReLU(inplace=True)) self.input_channels = out_channels layers.append(nn.MaxPool1d(kernel_size=2, stride=2)) return nn.Sequential(*layers) #前向传播 def forward(self,input_seq): # torch.Size([32, 1024]) #改变输入形状,适应网络输入[batch,dim, seq_length] input_seq = input_seq.view(self.batch_size, 1, 1024) # 送入CNN网络模型 features = self.features(input_seq) # 调用,torch.Size([32, 128, 128]) # 自适应平均池化 x = self.avgpool(features) # ttorch.Size([32, 128, 1]) # 平铺 flat_tensor = x.view(self.batch_size, -1) # torch.Size([32, 128]) output = self.classifier(flat_tensor) # torch.Size([32, 10]) return output(1) 类定义和初始化 __init__batch_size:批次大小,表示每次训练时同时处理的数据样本数量。input_channels:输入数据的通道数。对于一维数据,通常为 1。conv_archs:CNN 网络结构的配置,是一个列表,其中每个元素是一个元组,指定了每个卷积块中卷积层的数量和输出通道数。num_classes:输出的维度,即分类任务中的类别数。self.batch_size:存储传入的参数batch_size,即每批次样本数量。self.conv_arch :存储传入的参数conv_archs,即每个卷积块中卷积层的数量和输出通道数。self.input_channels :存储传入的参数input_channels,即输入数据的通道数。self.features:通过调用 self.make_layers() 方法构建 CNN 的卷积和池化层。self.avgpool:定义一个自适应平均池化层,用于将特征图的空间维度压缩为1。self.classifier:定义一个全连接层,用于将特征映射到输出类别。(2) CNN 卷积池化结构构建 make_layers作用:根据 conv_archs 和 input_channels 构建 CNN 的卷积和池化层。遍历 conv_archs 中的每个元组,每个元组表示一个卷积块。对于每个卷积块,根据指定的卷积层数量和输出通道数,添加相应数量的卷积层 和 ReLU 激活层。在每个卷积块的末尾添加一个最大池化层,用于降低特征图的空间维度。返回值:将构建的层组合成一个 nn.Sequential 模块并返回。(3) 前向传播forward输入数据处理:将输入数据 input_seq 重塑为 [batch_size, 1, 1024] 的形状,以适应网络的输入要求。这里假设输入数据的长度为 1024,且只有一个特征通道。通过 CNN 层:将输入数据通过 self.features,提取特征,得到 features。输出形状为 [batch_size, 128, 128]。自适应平均池化:使用 self.avgpool 对特征图进行全局平均池化,输出形状为 [batch_size, 128, 1]。展平操作:将池化后的特征展平为 [batch_size, 128] 的形状。通过全连接层:将展平后的特征通过 self.classifier 全连接层进行分类,输出最终的分类结果,形状为 [batch_size, num_classes]。(4) 模型实例化#模型实例化batch_size = 32conv_archs = conv_archs = ((2, 32), (1, 64), (1, 128)) # vgg11input_channels = 1 # 做 1 D卷积, 输入维度为1num_classes = 10model = VGG1DModel(batch_size, input_channels, conv_archs, num_classes)batch_size = 32:批次大小为 32。conv_archs = ((2, 32), (1, 64), (1, 128)):CNN 网络结构配置,表示有三个卷积块,第一个卷积块包含两个卷积层,输出通道数为 32;第二个卷积块包含一个卷积层,输出通道数为 64;第三个卷积块包含一个卷积层,输出通道数为 128。input_channels = 1:输入通道数为 1,表示一维卷积。num_classes = 10:输出类别数为 10。(5) 打印模型观察框架print(model)#检查模型框架图1 1DCNN模型结构根据输出结果可以看出这个VGG1DModel是一个为一维数据设计的卷积神经网络模型,它由一系列卷积层、激活层、池化层以及最后的全连接层组成。模型的输入层接受单通道的一维数据,随后通过两个具有32个输出通道的卷积层,每个卷积层后面紧跟一个ReLU激活函数,用于增加非线性。接着是一个最大池化层,用于降低特征图的维度。然后,模型通过一个具有64个输出通道的卷积层,再次应用ReLU激活,随后是第二个最大池化层。接下来,模型通过一个具有128个输出通道的卷积层和第三个最大池化层,这之后是一个自适应平均池化层,将特征图的每个维度缩减到1。最后,一个全连接层将128个输入特征映射到10个输出类别,通常用于分类任务。整个网络结构旨在通过层层抽象提取一维数据的特征,并最终实现有效的分类。6.3.3模型训练# 训练模型import timeimport torch.nn.functional as Fimport matplotlibimport matplotlib.pyplot as pltmatplotlib.rc("font", family='Microsoft YaHei')def model_train(batch_size, epochs, train_loader, val_loader, model, optimizer, loss_function): model = model.to(device) # 定义损失函数和优化函数 loss_function = nn.CrossEntropyLoss(reduction='sum') # loss learn_rate = 0.0003 optimizer = torch.optim.Adam(model.parameters(), learn_rate) # 优化器 # 样本长度 train_size = len(train_loader) * batch_size val_size = len(val_loader) * batch_size # 最高准确率 最佳模型 best_accuracy = 0.0 best_model = model train_loss = [] # 记录在训练集上每个epoch的loss的变化情况 train_acc = [] # 记录在训练集上每个epoch的准确率的变化情况 validate_acc = [] validate_loss = [] # 计算模型运行时间 start_time = time.time() for epoch in range(epochs): # 训练 model.train() loss_epoch = 0. #保存当前epoch的loss和 correct_epoch = 0 #保存当前epoch的正确个数和 for seq, labels in train_loader: seq, labels = seq.to(device), labels.to(device) # print(seq.size(), labels.size()) torch.Size([32, 7, 1024]) torch.Size([32]) # 每次更新参数前都梯度归零和初始化 optimizer.zero_grad() # 前向传播 y_pred = model(seq) # torch.Size([16, 10]) # 对模型输出进行softmax操作,得到概率分布 probabilities = F.softmax(y_pred, dim=1) # 得到预测的类别(最大概率的标签) predicted_labels = torch.argmax(probabilities, dim=1) # 与真实标签进行比较,计算预测正确的样本数量 # 计算当前batch预测正确个数 correct_epoch += (predicted_labels == labels).sum().item() # 损失计算 loss = loss_function(y_pred, labels) loss_epoch += loss.item() # 反向传播和参数更新 loss.backward() optimizer.step() # break # break # 计算准确率 train_Accuracy = correct_epoch/train_size train_loss.append(loss_epoch/train_size) train_acc.append(train_Accuracy) print(f'Epoch: {epoch+1:2} train_Loss: {loss_epoch/train_size:10.8f} train_Accuracy:{train_Accuracy:4.4f}') # 每一个epoch结束后,在验证集上验证实验结果。 with torch.no_grad(): loss_validate = 0. correct_validate = 0 for data, label in val_loader: data, label = data.to(device), label.to(device) pre = model(data) # 对模型输出进行softmax操作,得到概率分布 probabilities = F.softmax(pre, dim=1) # 得到预测的类别 predicted_labels = torch.argmax(probabilities, dim=1) # 与真实标签进行比较,计算预测正确的样本数量 # 计算当前batch预测正确个数 correct_validate += (predicted_labels == label).sum().item() loss = loss_function(pre, label) loss_validate += loss.item() # print(f'validate_sum:{loss_validate}, validate_Acc:{correct_validate}') val_accuracy = correct_validate/val_size '' print(f'Epoch: {epoch+1:2} val_Loss:{loss_validate/val_size:10.8f}, validate_Acc:{val_accuracy:4.4f}') validate_loss.append(loss_validate/val_size) validate_acc.append(val_accuracy) # 如果当前模型的准确率优于之前的最佳准确率,则更新最佳模型 #保存当前最优模型参数 if val_accuracy > best_accuracy: best_accuracy = val_accuracy best_model = model# 更新最佳模型的参数 # 保存最后的参数 # torch.save(model, 'final_model_1dvgg.pt') # 保存最好的参数 torch.save(best_model, 'best_model_1dvgg.pt') print(f'\nDuration: {time.time() - start_time:.0f} seconds') # 保存结果 方便 后续画图处理 dump(train_loss, 'train_loss') dump(train_acc, 'train_acc') dump(validate_loss, 'validate_loss') dump(validate_acc, 'validate_acc') print("best_accuracy :", best_accuracy)# batch_size = 32epochs = 50# 模型训练model_train(batch_size, epochs, train_loader, val_loader, model, optimizer, loss_function)这段代码定义了一个 ’model_train‘的函数,用于训练一个深度学习模型。首先将模型移动到指定的设备上,计算训练集和验证集的样本总数,并初始化用于记录训练和验证过程中损失和准确率的列表以及存储最佳模型和最高准确率的变量。然后,在指定的训练轮数内,通过遍历训练数据加载器中的每个批次,进行前向传播、损失计算、反向传播和参数更新,同时记录每个 epoch 的训练损失和准确率。在每个 epoch 结束后,使用验证数据加载器评估模型性能,计算验证集的损失和准确率,并根据验证准确率更新最佳模型。最后,保存训练过程中最佳的模型参数到文件'best_model_1dvgg.pt'中,并计算模型训练的总运行时间。整个过程包含模型的训练、验证和性能评估等多个环节。图2 训练过程及结果(GPU版)根据代码结果可知,训练50次的情况下用时71s,其中验证集上最好的准确率是0.96,接着我们可以用曲线具体描述模型训练过程。import matplotlibimport matplotlib.pyplot as pltimport numpy as npfrom joblib import dump, loadmatplotlib.rc("font", family='Microsoft YaHei')# 加载数据train_loss = load('train_loss')train_acc = load('train_acc')validate_loss = load('validate_loss')validate_acc = load('validate_acc')# 创建训练损失图# 创建左侧图:损失plt.figure(figsize=(14, 7), dpi=300)plt.subplot(1, 2, 1)plt.plot(train_loss, label='Train-loss', marker='^', color='blue') # o ^ * s + x , marker='o'plt.plot(validate_loss, label='Validate-loss', marker='+', color='red') # 颜色 曲线类型 可灵活替换plt.xlabel('Epochs', fontsize=12)plt.ylabel('Loss', fontsize=12)plt.xticks(fontsize=10)plt.yticks(fontsize=10)plt.legend(fontsize=12)plt.title('training visualization : Training and Validation Loss', fontsize=16)# 创建右侧图:准确率plt.subplot(1, 2, 2)plt.plot(train_acc,color = 'orange', marker='o',label = 'Train-accuracy')plt.plot(validate_acc, color = 'green', marker='*',label = 'Validate_accuracy')plt.xlabel('Epochs', fontsize=12)plt.ylabel('Accuracy', fontsize=12)plt.xticks(fontsize=10)plt.yticks(fontsize=10)plt.legend(fontsize=12)plt.title(' training visualization : Training and Validation Accuracy', fontsize=16)plt.tight_layout() # 用于确保子图之间的距离适当plt.show()这段代码加载训练过程中的各个结果,其中train_loss代表训练集损失值、train_acc代表训练集准确率、validate_loss代表验证集损失值、validate_acc代表验证集准确率,并通过曲线图绘制训练过程,包含每次训练的准确率以及损失函数变化。图3 训练过程曲线结果如图所示,其中左图蓝色曲线是训练集损失函数变化,红色是验证集损失函数,右图中黄色是验证集准确率变化曲线,绿色是验证集准确率变化曲线。随着训练次数增加,损失函数逐渐减少,准确率逐渐增加趋近于1。6.3.4 模型验证模型验证部分代码首先用测试集输入最佳模型,并通过折线图以及准确率、召回率等指标检验模型效果,最后通过混淆矩阵进一步分析实验结果。# 模型 测试集 验证 from sklearn.metrics import confusion_matriximport torch.nn.functional as Fdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 有GPU先用GPU训练print(device)# 得出每一类的分类准确率model = torch.load('best_model_1dvgg.pt')model = model.to(device)# 使用测试集数据进行推断并计算每一类的分类准确率true_labels = [] # 存储类别标签predicted_labels = [] # 存储预测的标签with torch.no_grad(): for test_data, test_label in test_loader: # 将模型设置为评估模式 model.eval() test_data = test_data.to(device) test_output = model(test_data) probabilities = F.softmax(test_output, dim=1) predicted = torch.argmax(probabilities, dim=1) true_labels.extend(test_label.tolist()) predicted_labels.extend(predicted.tolist())# 混淆矩阵confusion_mat = confusion_matrix(true_labels, predicted_labels)from sklearn.metrics import classification_report# 计算每一类的分类准确率report = classification_report(true_labels, predicted_labels, digits=4)print(report)首先,代码设置了一个设备变量 'device',用于确定模型将在 CPU 还是 GPU 上运行。如果系统中有可用的 CUDA(GPU)设备,'device'将被设置为 "cuda",否则将使用 "cpu"。然后,打印出当前选择的设备,以确认模型将在哪个设备上运行。接下来,代码加载了预训练的最佳模型参数文件 'best_model_1dvgg.pt',并将模型移动到之前设置的设备上。true_labels用于存储测试集的真实标签、predicted_labels用于存储测试集预测标签。然后,代码进入一个 'with torch.no_grad()' 块,这个上下文管理器用于禁用梯度计算,因为在推断过程中不需要计算梯度,这样可以减少内存消耗和加快计算速度。在该块内,代码遍历测试数据加载器'test_loader'中的每个批次数据 'test_data' 和对应的标签 'test_label'。对于每个批次的数据,将模型设置为评估模式 'model.eval()',这会关闭模型中的一些特定于训练的行为,如 'Dropout' 层。接着,将测试数据移动到指定的设备上,并进行前向传播 'est_output = model(test_data)',得到模型对测试数据的输出。然后,对模型输出进行 'softmax' 操作 'F.softmax(test_output, dim=1)',得到每个类别的概率分布。使用 'torch.argmax(probabilities, dim=1)'获取预测的类别标签,并将真实标签和预测标签分别添加到'true_labels'和 'predicted_labels'列表中。在完成所有测试数据的推断后,代码使用 'confusion_matrix`'函数计算混淆矩阵。混淆矩阵的行表示真实标签,列表示预测标签,矩阵中的每个元素表示对应类别对的样本数量。最后,代码使用 'classification_report'函数生成一个文本报告,显示主要的分类指标,包括精确率、召回率、F1 分数和支持度。'digits=4'参数表示结果保留四位小数。打印出分类报告,以查看每一类的分类准确率和其他指标,从而评估模型在测试集上的整体性能。图4 测试集文本报告根据生成文本报告,我们可以初步判断在调用训练得到的最佳模型对测试集检验时,标签0、标签1、标签3、标签7、标签9的F1得分达到了百分百,总体准确率为0.93。注:在机器学习和数据科学中,评价指标是用来衡量模型性能的标准。不同的问题类型(如分类、回归、聚类等)会使用不同的评价指标。以下是一些常见的评价指标:1) 分类问题的评价指标:准确率(Accuracy):正确预测的样本数占总样本数的比例。精确率(Precision):预测为正类的样本中实际为正类的比例。召回率(Recall):所有实际为正类的样本中,被正确预测为正类的比例。F1-score:精确率和召回率的调和平均数。AUC-ROC曲线:接收者操作特征曲线下的面积,用于衡量模型区分正负类的能力。混淆矩阵(Confusion Matrix):显示真实类别与预测类别之间的关系。 宏平均(Macro Average):这种方法计算每个类别的指标(如精确度、召回率、F1分数等),然后取这些指标的算术平均值。它对所有类别给予相同的权重,不考虑类别之间的样本数量差异。这意味着每个类别对最终的宏平均指标的贡献是相同的。 加权平均(Weighted Average):与宏平均不同,加权平均在计算指标时会考虑每个类别的样本数量。它为每个类别的指标赋予权重,这个权重通常是该类别样本数量占总样本数量的比例。因此,样本数量较多的类别对最终的加权平均指标的贡献更大 。2) 回归问题的评价指标:均方误差(Mean Squared Error, MSE):预测值与真实值差的平方的平均值。均方根误差(Root Mean Squared Error, RMSE):MSE的平方根。平均绝对误差(Mean Absolute Error, MAE):预测值与真实值差的绝对值的平均值例如,我们通过加载上述混淆矩阵并画出具体矩阵图分析模型效果。# 绘制混淆矩阵import matplotlib.pyplot as pltimport seaborn as sns# 原始标签和自定义标签的映射label_mapping = { 0: "C1",1: "C2",2: "C3",3: "C4",4: "C5", 5: "C6",6: "C7",7: "C8",8: "C9",9: "C10",}# 绘制混淆矩阵plt.figure(figsize=(10, 8), dpi=300)sns.heatmap(confusion_mat, xticklabels=label_mapping.values(), yticklabels=label_mapping.values(),annot=True, fmt='d', cmap='summer')plt.xlabel('Predicted Labels')plt.ylabel('True Labels')plt.title('Confusion Matrix')plt.show()图5 测试集混淆矩阵如图,混淆矩阵的行表示真实标签,列表示预测标签,矩阵中的每个元素表示对应类别对的样本数量。例如对标签2数据分析可知,标签2真实数据有48个,其中45个预测为标签2,有3个预测为标签8。在所有预测为标签2的数据中,有45个是正确的,其中1个标签5和4个标签8错误的预测为标签2。混淆矩阵那可以非常直观明了确定真实标签以及预测标签的分布情况。6.3.5 对比CPU版Pytorch图6 训练过程及结果(CPU版)通过对比可得,在简单的基础模型条件下,使用GPU计算可比CPU计算节省一半时间,在更复杂的数据及模型中GPU的运算速度及优势将更为明显。编辑:赵栓栓校核:李正平、陈凯歌、曹希铭、赵学功、白亮、王金、陈莹洁、陈宇航、任超、海洋、Tina、赵诚该文资料搜集自网络,仅用作学术分享,不做商业用途,若侵权,后台联系小编进行删除点击左下角阅读原文,即可在线阅读论文。 来源:故障诊断与python学习

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