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

news2024/9/20 15:07:27

概要

迁移学习(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.coloradmin.cn/o/2111968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新材料 金属3D打印发展的加速器

在金属3D打印的广阔舞台上,材料性能犹如舞台的台柱,直接决定了打印工件性能的优劣。从强度、硬度到耐腐蚀性、抛光性及导热性,每一项指标都紧密关联着材料的选择,而优质材料正是推动这项技术跨越边界、深入更多行业领域的核心动力…

一个vue重新回顾,好多年前写的

在校期间简单跟着视频学习的代码,后面上传到github仓库就一直没有使用了,今天重新加载,重新启动。下面是启动时候遇到的问题,主要原因是我这部电脑是新电脑,很多环境还没有搭建。 成功启动后的页面效果 这里采用的思…

oauth2 方式获取outlook邮箱收件箱(python)

1.在Azure 门户注册应用程序 微软文档地址 重定向的地址配置(微软地址): https://login.microsoftonline.com/common/oauth2/nativeclient 注册应用地址 2.程序代码 #安装包以及需要的驱动 pip3 install playwrightplaywright install import base64 import jso…

服务器模型 Reactor 和 Proactor

Proactor 具体流程如下: 处理器发起异步操作,并关注 IO 完成事件;事件分离器等待操作完成事件;分离器等待过程中,内核并行执行实际的 IO 操作,并将结果存储入用户自定义的缓冲区,最后通知事件分…

零工市场小程序:自由职业者的日常工具

零工市场小程序多功能且便捷,提供了前所未有的灵活性和工作效率。这类小程序不仅改变了自由职业者的工作方式,也重塑了劳动力市场的格局。 一、零工市场小程序的特点 即时匹配:利用先进的数据算法,零工市场小程序能够快速匹配自由…

ASP.Net Core 因集成WebSocket导致Swagger UI显示错误

文章目录 前言一、ApiExplorerSettings二、解决Swagger UI显示问题 前言 Swagger UI 本身并不支持直接展示或测试 WebSocket 端点。Swagger(现在称为 OpenAPI)及其 UI 实现主要是为 RESTful API 设计的,这些 API 基于 HTTP 请求/响应模型。W…

IDEA加载工程报错Error Loading Project: Cannot load module demo.iml解决

spring boot工程由于工程名字为demo不太好,直接更改了这个工程的名字,主要操作了包括重命名项目文件夹、修改IDEA中的项目名称、模块名称、包名称、以及相关的配置文件等。 然后再打开工程,报错Error Loading Project: Cannot load module de…

MyBatis ——在java层面对MySQL数据库进行操作

目录 MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发; 使用MyBatis 查询所有用户数据的过程 Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码 注解: 引入Myb…

Oracle之用TO_CHAR函数将日期格式转化为不带前导零的月份和日

要求: 1、日期格式转化成字符串格式,月和日前面的0需要去掉,如日期2024-09-06需要转化成2024-9-6; 2、如果用截取拼接函数写法就会复杂,最好用TO_CHAR函数格式化实现。 正确写法: SELECT TO_CHAR(SYSDAT…

使用cage工具包生成验证码

目录 1. 导入依赖2. 控制类3. 测试 1. 导入依赖 <!-- 验证码工具 --><dependency><groupId>com.github.cage</groupId><artifactId>cage</artifactId><version>1.0</version></dependency>2. 控制类 RestControl…

SD-WAN解决外贸企业网络搭建问题

在全球化浪潮下&#xff0c;外贸企业日益感受到互联网和数字化技术对业务发展的重要性。作为一种创新的网络解决方案&#xff0c;SD-WAN&#xff08;软件定义广域网&#xff09;正成为外贸企业网络升级的重要助力。本文将深入剖析SD-WAN如何有效解决外贸企业网络搭建中的关键问…

ubuntu java

1、安装&#xff1a;https://zhuanlan.zhihu.com/p/565274672 遇到 sudo kill 8544 2、然后可以正常安装 编写hello world: https://blog.csdn.net/qq_33523925/article/details/92410963 安装IDEA Linux系统安装IDEA保姆级教程_linux安装idea-CSDN博客 3、idea如何设置…

【第0006页 · 数组】寻找重复数

【前言】本文以及之后的一些题解都会陆续整理到目录中&#xff0c;若想了解全部题解整理&#xff0c;请看这里&#xff1a; 第0006页 寻找重复数 今天想讨论的一道题在 LeetCode 上评论也是颇为“不错”。有一说一&#xff0c;是道好题&#xff0c;不过我们还是得先理解了它才…

北京理工大学开设仓颉实践课程,培养特色化软件人才

为响应国家软件发展战略&#xff0c;培养满足产业发展需求的特色化软件人才&#xff0c;北京理工大学信息技术创新学院率先把仓颉语言引入到大二暑期的实践课程中。在今年暑期为期3周的实践课中&#xff0c;信息技术创新学院教研中心副主任徐礼文老师开设了“仓颉语言HarmonyOS…

Git 撤回commit

上一篇&#xff0c;Git撤销add&#xff0c;其实已经讲了用reset命令可以取消commit&#xff0c;这里再啰嗦下。先看&#xff1a; git如何撤回已经commit • Worktile社区 首先明确一点&#xff0c;无论是commit还是撤销commit&#xff0c;都是在本地暂存区操作&#xff0c;而…

CTFHub技能树-Git泄漏-Stash

目录 一、前提知识 1.什么是git stash 2.git文件目录结构 3.git中对象指向 二、解题过程 方法一&#xff1a;使用GitHack 方法二&#xff1a;使用Git_Extract工具&#xff0c;这个是自动解析不用git stash等操作&#xff0c;直接得到flag 当前大量开发人员使用git进行版本…

C/C++:C语言中的__FILE__、__LINE__等几种C标准用法

C语言中的几种特殊标准定义 __FILE__ &#xff1a;正在编译文件的文件名__LINE__ &#xff1a;正在编译文件的行号__DATE__&#xff1a;编译时刻的日期字符串 如“Sep 22 2020”__TIME__&#xff1a;编译时刻的时间字符串 如”10:00:00“__STDC__&#xff1a;判断该文件是不是…

网关功能介绍

在微服务架构中&#xff0c;网关&#xff08;API Gateway&#xff09;扮演着至关重要的角色&#xff0c;它作为客户端和微服务之间的中介&#xff0c;负责路由、过滤、认证、限流等职责。以下是一些常见的网关实现&#xff1a; Spring Cloud Gateway&#xff1a; Spring Cloud …

【佳学基因检测】网站加密证书失效后,如何移除并为新的证书安装准备环境?

【佳学基因检测】网站加密证书失效后&#xff0c;如何移除并为新的证书安装准备环境&#xff1f; 当WoTrus DV Server CA证书失效后&#xff0c;你需要确保你的Nginx配置中不再引用该证书&#xff0c;并且移除或替换相关的证书文件。以下是具体步骤&#xff1a; 1. 确认Nginx…

如何在 cPanel 中使用 PuTTY SSH

cPanel & WHM 的直观网页界面使管理服务器和虚拟主机账户变得轻松。然而&#xff0c;有时在服务器命令行上工作也是很有用的。PuTTY SSH客户端允许您通过加密连接登录到服务器的命令行界面&#xff0c;从而确保敏感数据不会在互联网上暴露。Hostease 提供高性能的服务器&am…