当前位置: 首页 > article >正文

不同工况下的迁移轴承故障诊断,融合SE注意力机制的Resnet18迁移学习,附MATLAB代码...

概要

迁移学习(Transfer Learning)是一种在机器学习中广泛应用的技术,它利用在一个任务上获得的知识来帮助解决另一个相关任务。迁移学习尤其适用于数据量有限或训练成本较高的情况。它可以显著提高模型的性能和训练效率。 db42d6bd14144679af7febe9ac04521b.jpeg

 本期采用MATLAB语言编写SE-Resnet18网络,实现对西储大学数据的故障诊断。并将在工况0条件下训练好的SE-Resnet18模型的残差模块和SE模块进行冻结,只对全连接层进行微调,实现在工况1、2、3下的迁移学习。

最终实验结果:

在工况0下,取800个样本进行训练,400个样本进行测试,诊断准确率为:100%

将工况0的模型迁移到工况1时只采用小样本(每种故障取10个样本)对全连接层微调,训练速度只有几秒,测试集(1100个样本)的诊断准确率为:99.72%

将工况0的模型迁移到工况2时,只采用小样本(每种故障取10个样本)对全连接层微调,训练速度只有几秒,测试集(1100个样本)的诊断准确率为:99.2%

将工况0的模型迁移到工况3时,只采用小样本(每种故障取10个样本)对全连接层微调,训练速度只有几秒,测试集(1100个样本)的诊断准确率为:99.10%

1. SE-Resnet介绍

近年来,各种注意力机制横空出行,将注意力机制与各种深度学习模型结合,模型对特征提取的能力相较于一般的深度学习网络更加强大,在降低网络学习的参数量的同时也提高了网络模型的泛化能力。

SE-ResNet(Squeeze-and-Excitation ResNet)是ResNet的一种改进版本,它结合了Squeeze-and-Excitation(SE)模块来提升网络的性能。SE模块通过对通道进行重新加权,使网络能够更好地自适应地关注不同通道的重要性。SE-ResNet的优势包括:

  1. 增强的特征表达能力:通过对特征通道进行重要性建模,SE模块能够提升网络对重要特征的敏感度,从而增强特征的表达能力。

  2. 更少的计算开销:尽管SE模块引入了额外的计算,但其设计相对简单,计算开销相比于网络其他部分较小,且通常带来性能的显著提升。

  3. 易于集成:SE模块可以与现有的网络架构(如ResNet、Inception等)无缝集成,提升网络性能而不需要重新设计整个网络架构。

  • SE机制的论文地址:https://arxiv.org/abs/1709.01507

下图是在提出SE模块的原文截取的,原文作者将SE模块应用在Resnet模块为例进行了展示。

9cad52d8be1faedee63300f85ddb3cce.png

可以看到SEmodule被应用到了Resnet模块的残差分支上。为了更好解释SE模块为什么能提高Resnet网络的泛化能力,这里附上一张更加形象的图。

85f28331eb18057a2fd7edd262a80e00.png

原始的Resnet网络(图左),在进行两次3×3的卷积后,直接与上一步的池化或卷积的结果进行相加。

而在SE-Resnet结构(图右),首先将两次卷积后的特征维度进行全局池化处理,然后经过两个全连接层,而玄妙就在这两个全连接层,其中第一个全连接层将特征维度降低到输入的1/r,然后经过ReLu激活后再通过第二个全连接层升回到原来的维度。这样做比直接用一个全连接层的好处在于:①具有更多的非线性,可以更好地拟合通道间复杂的相关性;②极大地减少了参数量和计算量。最后再通过一个Sigmoid的门获得[0,1]之间归一化的权重。最后通过一个Scale的操作(也就是对应通道相乘)来将归一化后的权重加权到每个通道的特征上。相当于对每个通道的权重特征进行了一个标定,使得注意力集中在权重较高的通道上。不得不说,秒啊!

2. SE-Resnet的MATLAB实现

本期代码将SE机制在MATLAB中实现,并缝合到Resnet18网络中。看一下网络结果图吧,左边是SE-ResNET模块的结构图,右边是在MATLAB中实现的网络结构,完美实现了一一对应!

0eaba46fb5065dd1c850700b51f7d533.png

核心代码如下:这里展示了如何将SE模块缝合进去。

% Then, you need to connect the SE block properly
SEblockName = '2a';
ecaLayers = SEBlock(64,16,SEblockName); % Example parameters
lgraph = addLayers(lgraph, ecaLayers);
lgraph = disconnectLayers(lgraph, 'bn2a_branch2b', 'res2a/in1');
lgraph = connectLayers(lgraph, 'bn2a_branch2b', ['se_global_pool_',SEblockName]);
mul = multiplicationLayer(2,'Name',['scale_',SEblockName]);
lgraph = addLayers(lgraph, mul);
lgraph = connectLayers(lgraph, 'bn2a_branch2b', ['scale_',SEblockName,'/in1']);
lgraph = connectLayers(lgraph, ['se_sigmoid_',SEblockName],['scale_',SEblockName,'/in2']);
lgraph = connectLayers(lgraph, ['scale_',SEblockName], 'res2a/in1');

3.基于SE-Resnet模型,在不同工况下实现迁移学习的轴承故障诊断

实验步骤如下:

第一步:处理不同工况的西储大学数据。西储大学数据详情截图如下:

f410ae43395c563470aa8a49511aac4d.png

可以看到第二列的电机载荷分为0、1、2、3四种工况,这里只取故障直径为0.1778、0.3556、0.5334mm时的四种工况。对四种工况数据进行处理,处理方式如下:

采取部分重叠的采样方法即从原始信号中采集样本,相邻的采样样本之间存在部分重叠。将原始时域信号每2048个数据点组成一个样本,为了保证每个数据点都能采集到,相邻的样本点会有重叠的1048个数据点,滑动窗口的步长为1000。最终每个工况包含10种故障类型,每种类型包含120个样本。

第一步的代码整理截图如下,最后得到Working condition0.mat、Working condition1.mat、Working condition2.mat、Working condition3.mat,分别表示工况0、1、2、3。

a6abea1366f69df1befcee58862c0fb3.png

第二步:将第一步数据转换为连续小波变换时频图:

将第一步得到的四种不同工况的数据进行同步提取小波变换,提取的图片放在了相应的“工况x连续小波变换视频图”文件夹内,然后再将图像进行一个压缩,之所以压缩,是为了后续训练模型节省时间,代码整理截图如下:

c5452f6c9cd047dc11530ca20b99f46f.png

第三步:模型训练与不同工况下的迁移学习

首先采用SE-Resnet18网络对工况0的数据进行训练与测试,选每组故障的前80个样本进行训练,后40个样本测试,结果如下:

5063ed6ff51b2c365c4a400512df200b.png

模型识别前后的Tsne降维图如下:

892ba09d5266b9677d9d1d846c157c57.png

迁移学习:然后将工况0下训练好的SEResnet18模型的残差模块和SE模块进行冻结,采用工况1、2、3的小样本数据(每种故障类型只取10组样本)对模型的全连接层进行微调,并采用剩下的1100个样本(每种故障类型110个)进行测试。

测试结果如下:

工况0迁移到工况1的测试结果:

b3f9b8a19edad70bf4179860afbd4583.png

同样的操作,将工况0下训练好的SEResnet18模型迁移到工况2、3,测试结果如下:

工况0迁移到工况2的测试结果:

ca9866c4362a6f94f16cba461df82d06.png

工况0迁移到工况3的测试结果:

80f21e50017dde826fd44db733d108bf.png

第三步的代码目录截图如下:

ead6ff3cdfaa4a8649de7f64d78372ff.png

代码获取

链接:https://mbd.pub/o/bread/mbd-Zpmal51y

或者点击下方阅读原文获取。


获取更多代码:

e07badad94019835ada040b80b88db67.png

或者复制链接跳转:
https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu

http://www.kler.cn/a/298865.html

相关文章:

  • 利用Circuit JS1再学学电子方面的知识(硬件)
  • LabVIEW中什么和C 语言指针类似?
  • DL作业11 LSTM
  • 【蓝桥杯——物联网设计与开发】基础模块8 - RTC
  • 《智启新材:人工智能重塑分子结构设计蓝图》
  • # 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)
  • LeetCode53. 最大子数组和(2024秋季每日一题 15)
  • 基于UDP的简易网络通信程序
  • Shell入门
  • Flutter集成Firebase中的Remote Config
  • Ai+若依(集成easyexcel实现excel表格增强)
  • Sky Takeaway
  • WEBSERVER完整体系
  • Java 创建对象方法的演变
  • ARM----时钟
  • Mybatis--SqlSessionFactory 、SqlSession
  • Java并发复习
  • 文案改写工具有哪些?5款智能改写工具迅速提升文案品质
  • Android11 MTK 安装apk时进行密码验证
  • 经验笔记:SQL调优
  • Java 入门指南:Java 并发编程 —— Copy-On-Write 写时复制技术
  • ElasticSearch的DSL查询④(DSL查询、RestClient的DSL查询)
  • Linux内核 -- 内存管理之 lru_cache_add_inactive_or_unevictable 函数
  • go切片的深入学习以及context库的使用
  • 一道迭代器失效练习题
  • SparkSQL FUNCTION相关操作