独家原创!TCN-BiGRU-Attention一键实现西储大学故障诊断与讲解!附带处理好的Excel故障诊断数据集!

       声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 

目录

数据介绍与故障诊断讲解

1.数据预处理

2.特征提取

模型流程与创新点

1.TCN(时间卷积网络)

2.BiGRU(双向门控循环单元)

3.Attention(自注意力机制)

4.基于TCN-BiGRU-Attention的分类预测方法

结果展示

部分代码展示

完整代码


        今天为大家带来一期利用TCN-BiGRU-Attention模型一键实现西储大学轴承故障诊断代码与原理讲解,非常新颖!

        需要注意的是,本期代码直接附赠了处理好的西储大学轴承数据集,并且是Excel格式,已经帮大家替换到了程序里!大家使用的时候只需要一键运行main即可出来所有图片与故障诊断结果(还有打印出来的损失函数曲线)非常方便!不像其他程序一样需要运行很多文件!适合新手小白!

        当然,如果你想替换成自己的其他分类数据集,也非常方便!只需替换Excel文件即可,无需更改代码!

        老规矩!本期的这个算法在知网和WOS都是搜索不到的,完全是作者独家原创的!大家用来写论文都是完全可以的!不信的可以看下面截图!

        知网平台:

        WOS平台:

数据介绍与故障诊断讲解

        此处使用的数据是西储大学官方的轴承数据!首先说一下该数据集的处理步骤以及来源:

1.数据预处理

        取官方下载的驱动端(DE)振动数据,分别为97.mat、107.mat、120.mat、132.mat、171.mat、187.mat、199.mat、211.mat、224.mat、236.mat,即转速为1750时的10种故障诊断类型(包括正常情况),并将所有的数据和类别综合到一个变量中。下图即为12K采样频率下的驱动端轴承故障数据(*表示数据不可用)

2.特征提取

        利用VMD算法,选择最佳参数K和α(这里可利用各种优化算法进行优化),基于包络熵最小的准则,提取每个样本的最佳IMF分量,并丢弃其他分量,因为最佳IMF分量已经包含了故障特征的丰富信息!然后,对最佳IMF分量的9个指标进行计算,分别是:均值,方差,峰值,峭度,有效值,峰值因子,脉冲因子,波形因子,裕度因子(对应特征1-9),类别即故障类型,都已经整理好放在了Excel里,如下图所示!

        最后,像往常一样,根据10种不同的故障类型直接送入模型进行分类预测即可!

        这里顺便说一下10种不同的故障类型分别是什么意思:

        类别1:正常情况

        类别2:直径0.007英寸,转速为1750时的内圈故障

        类别3:直径0.007英寸,转速为1750时的滚动体故障

        类别4:直径0.007英寸,转速为1750时的外圈故障

        类别5:直径0.014英寸,转速为1750时的内圈故障

        类别6:直径0.014英寸,转速为1750时的滚动体故障

        类别7:直径0.014英寸,转速为1750时的外圈故障

        类别8:直径0.021英寸,转速为1750时的内圈故障

        类别9:直径0.021英寸,转速为1750时的滚动体故障

        类别10:直径0.021英寸,转速为1750时的外圈故障

        也就是说,我们做故障诊断的目的就是为了判断出它到底是什么故障!之后我们才根据故障类型采取有效的解决措施!

        更换自己的数据时,也只需最后一列放类别,其余列放特征即可,无需更改代码,非常方便!

模型流程与创新点

1.TCN(时间卷积网络)

        时间卷积网络是一种通常用于处理时间序列的卷积神经网络,其主要结构为包含扩张因果卷积的残差块。因果卷积可以保证输出结果仅依赖于过去的输入信息,从而有效避免未来信息的泄漏;扩张卷积允许在卷积时对输入进行间隔采样,在扩大感受野的同时解决多元信息的提取问题。

2.BiGRU(双向门控循环单元)

        门控循环单元(GRU)是循环神经网络的一种, 是循环神经网络(RNN)和长短期记忆网络(LSTM) 的改进。BiGRU 本质上是一个双层 GRU 网络,在前向 GRU 层中,通过前向传播将特征输入到网络训练中,并挖掘数据的前向相关性。在逆向 GRU 层中,输入序列通过反向传播进行训练,挖掘数据的逆相关性。这种网络架构可以对输入的特征进行双向提取,更好的提高特征的完整性和全局性。

3.Attention(自注意力机制)

        在人类视觉观察中,视觉系统可以过滤掉高价值的信息而忽略不相关的信息,这就是注意力机制。注意力机制的核心思想是通过合理分配不同输入信息的注意力,为神经网络中的隐藏层状态赋予不同的权重,一串权重参数,要从序列中学习到每一个元素的重要程度,然后按重要程度将元素合并。权重参数就是一个注意力分配的系数,给哪个元素分配多少注意力。

4.基于TCN-BiGRU-Attention的分类预测方法

        结合TCN、BiGRU和Attention的优势,构建基于TCN-BiGRU-Attention的故障诊断分类预测模型!

        首先,通过堆叠3层的TCN残差模块以获取更大范围的输入序列感受野,同时避免出现梯度爆炸和梯度消失等问题每个残差块具有相同的内核大小k,其扩张因子D分别为1、2、4。

        其次,BiGRU获取到TCN处理后的数据序列,它将正反两个方向的GRU层连接起来,一个按从前往后(正向)处理输入序列,另一个反向处理。通过这种方式,BiGRU可以更加完整地探索特征的依赖关系,获取上下文关联。

        最后,加入单头注意力机制,其键值为2(也可以自行更改),经全连接层、softmax层和分类层厚将高维特征映射为最终预测结果。

结果展示

        这里已经贴心的帮大家把损失函数曲线图变成矢量图形式,方便大家放到论文里!

        损失函数曲线图:

        训练集预测结果:

        测试集预测结果:

        训练集混淆矩阵:

        测试集混淆矩阵:

        训练集准确率为97.5%,测试集准确率为95.556%,表明模型具有良好的分类预测能力,准确率非常高!当然,如果时间充足,更加仔细的调整下参数,效果会更好!

        以上所有图片,作者都已精心整理过代码,都可以一键运行main直接出图,不像其他代码一样需要每个文件运行很多次!

        不信的话可以看下面文件夹截图,仅仅只有3个文件,非常清晰明了!

        适用平台:Matlab2023版本及以上,没有的文件夹里已免费提供安装包!

部分代码展示

%%  读取数据
res = xlsread('故障诊断数据集.xlsx');
​
%%  分析数据
num_class = length(unique(res(:, end)));  % 类别数(Excel最后一列放类别)
num_dim = size(res, 2) - 1;               % 特征维度
num_res = size(res, 1);                   % 样本数(每一行,是一个样本)
num_size = 0.7;                           % 训练集占数据集的比例
res = res(randperm(num_res), :);          % 打乱数据集(不打乱数据时,注释该行)
flag_conusion = 1;                        % 标志位为1,打开混淆矩阵(要求2018版本及以上)
​
%%  设置变量存储数据
P_train = []; P_test = [];
T_train = []; T_test = [];
​
%%  划分数据集
for i = 1 : num_class
    mid_res = res((res(:, end) == i), :);           % 循环取出不同类别的样本
    mid_size = size(mid_res, 1);                    % 得到不同类别样本个数
    mid_tiran = round(num_size * mid_size);         % 得到该类别的训练样本个数
​
    P_train = [P_train; mid_res(1: mid_tiran, 1: end - 1)];       % 训练集输入
    T_train = [T_train; mid_res(1: mid_tiran, end)];              % 训练集输出
​
    P_test  = [P_test; mid_res(mid_tiran + 1: end, 1: end - 1)];  % 测试集输入
    T_test  = [T_test; mid_res(mid_tiran + 1: end, end)];         % 测试集输出
end
​
%%  数据转置
P_train = P_train'; P_test = P_test';
T_train = T_train'; T_test = T_test';
​
%%  得到训练集和测试样本个数
M = size(P_train, 2);
N = size(P_test , 2);
​
%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test  = mapminmax('apply', P_test, ps_input);
​
t_train =  categorical(T_train);
t_test  =  categorical(T_test );
​
%%  数据格式转换
for i = 1: M
    pc_train{1, i} = p_train(:, i); 
    tc_train{1, i} = t_train(:, i); 
end
​
%%  设置网络参数
numFilters = 16;          % 卷积核个数
filterSize = 3;           % 卷积核大小
dropoutFactor = 0.05;     % 空间丢失因子
numBlocks = 3;            % 残差块个数
​
numFeatures = num_dim;    % 特征个数
numClasses  = num_class;  % 类别个数
​
%%  输入层结构
layer = sequenceInputLayer(numFeatures, Normalization = "rescale-symmetric", Name = "input");

        可以看到,代码注释非常清晰,适合新手小白!

完整代码

        点击下方小卡片,后台回复关键字,不区分大小写:

GZZDA

        其他更多需求或想要的代码均可点击下方小卡片后后台私信,看到后会秒回~

         更多代码链接:更多代码链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501976.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】基础语法(1)

目 录 一.常量和表达式二.变量和类型变量是什么变量的语法(1) 定义变量(2) 使用变量 变量的类型(1) 整数(2) 浮点数(小数)(3) 字符串(4) 布尔(5) 其他 为什么要有这么多类型?动态类型特性 三.注释注释是什么注释的语法(1) 注释行(2) 文档字符串 注释的规范 四.输入输出和用户交…

Android熄屏/亮屏,旋转屏幕/横竖屏切换生命周期变化与activity销毁重建

Android熄屏/亮屏,旋转屏幕/横竖屏切换生命周期变化与activity销毁重建 1、熄屏/亮屏 熄屏后,Android生命周期走: onPause onStop 接着点亮Android手机屏幕,生命周期走: onRestart onStart onResume 2、旋转屏幕&…

JavaScript动态渲染页爬取——Playwright的使用

Playwright的使用 Playwright是微软在2020年年初开源的新一代自动化测试工具,其功能和Selenium、Pyppeteer等类似,都可以驱动浏览器进行各种自动化操作。Playwright对市面上的主流浏览器都提供了支持,API功能简洁又强大,虽然诞生…

nginx界面管理工具之nginxWebUI 搭建与使用

nginx界面管理工具之nginxWebUI 搭建与使用 一、nginxWebUI 1.nginx网页配置工具 官网地址: http://www.nginxwebui.cn 源码地址:https://git.chihiro.org.cn/chihiro/nginxWebUI 2.功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议…

EXCEL VBA将word里面的指定的关键词替换掉后并标记红色字体

EXCEL VBA将word里面的指定的关键词替换掉后并标记红色字体 Sub 开关() Call 新建副本 Call ReplaceAndHighlightInFolder End Sub Sub 新建副本()fpath ThisWorkbook.Path & "\"Dim MyFile As ObjectSet MyFile CreateObject("Scripting.FileSystemObjec…

FireWorks:加速科学计算和工作流程的强大工具

FireWorks:加速科学计算和工作流程的强大工具 FireWorks是一个功能强大的开源工具,旨在简化和加速科学计算和工作流程。它提供了一个灵活的编排框架,使研究人员和工程师能够高效地设计、管理和执行复杂的计算任务和工作流。本文将深入探讨Fir…

Hadoop安装部署-DataNode集群版

Hahoop分布式文件系统支持DataNode节点的大规模扩展,本文主要描述DataNode集群版的安装部署。 如上所示,Hadoop分布式文件系统中每个文件是以数据块的方式存储在不同的DataNode中,每个数据块都支持高可用性,当其中一个数据块对应的…

vue watch 深度监听

vue2文档&#xff1a;API — Vue.js vue3文档&#xff1a;侦听器 | Vue.js watch 可以用来监听页面中的数据&#xff0c;但如果监听的源是对象或数组&#xff0c;则使用深度监听&#xff0c;强制深度遍历源&#xff0c;以便在深度变更时触发回调。 一&#xff0c;监听 <t…

项目管理—项目合同签订后客户又不认了

大家好&#xff0c;我是不会魔法的兔子&#xff0c;是一名执业律师&#xff0c;创建[项目管理者的法小院儿]&#xff0c;持续从法律的角度分享项目管理中的风险及预防问题&#xff0c;让项目管理者能够提早发现与解决项目执行过程中的风险&#xff0c;同时欢迎大家一起交流&…

从快递公司内部辞职的快递员才告诉你的寄快递的真相!

我们知道现在寄快递有很多种方法&#xff0c;但是每种方法也都花费不少&#xff0c;但是我们知道最省钱的寄快递的方法吗&#xff1f;别急&#xff0c;小编了解到快递员告诉我许多快递物流的真相。我们寄快递无非就是去快递驿站寄快递&#xff0c;然后称重&#xff0c;然后计算…

七大 QC 工具图的定义与示例(看这篇就够了)

前言 七大 QC 工具图是通过数值的方式进行数据分析的工具&#xff0c;分别是鱼骨图、直方图、柏拉图、散布图、管制图、检查图和层别图。其实&#xff0c;我们在日常生活与工作中经常看到它们&#xff0c;只是样子和名字对不上而已&#xff0c;今天写这篇文章就是为了帮助自己…

蓝桥杯单片机---第十届省赛题目解析

文章目录 比赛题目一、代码相关定义、声明1.头文件声明2.变量声明 二、主要函数1.main函数2.按键扫描3.数码管显示4.LED显示5.定时器中断 三、次要函数1.初始化函数Init2.按键函数Key3.LED函数Led4.数码管函数Seg5.iic函数中6.onewire函数中 总结 比赛题目 这里因为我没有这个题…

如何搭建属于自己的Docker私有仓库

华子目录 Docker registry仓库介绍分类registry组成&#xff08;repository和index&#xff09;Repositoryindex 拉取上床仓库镜像拉取上传 知名docker仓库在docker hub商创建自己的docker registry将镜像上传到自己的registry从registry仓库中拉取镜像 搭建私有仓库Distributi…

备战蓝桥杯---树学初步1

LCA&#xff08;最近公共祖先&#xff09; 定义&#xff1a;有根树的两个节点u,v&#xff0c;他们的LCA是一个节点x,其中x是他们的公共祖先并且X的深度尽可能大。 法1---Tarjan算法&#xff1a; 核心&#xff1a;DFS并查集 在并查集中建立仅有u的集合&#xff0c;设该集合祖…

Redis入门到实战-第十三弹

Redis入门到实战 Redis中JSON数据类型常见操作官网地址Redis概述JSON常见操作更新计划 Redis中JSON数据类型常见操作 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是…

Java 扫描某包下所有类的注解并获得注解值

背景 &#xff1a; 需求 需要获取某个包下的所有的注解 并不是全部项目的 所以 只用针对某个包 进行扫描 获取注解 数据就行 百度了一圈 spring boot 没有自带的 获取注解集合的方法 在看 php 中 hyperf 框架 看到了 这个方法 就是因为 我需求是 php 和java 合体 微服务开发 …

c语言游戏实战(5):走迷宫

前言&#xff1a; 制作一个迷宫游戏是一个有趣的编程挑战。首先&#xff0c;我们需要设计一个二维数组来表示迷宫的布局&#xff0c;其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来&#xff0c;我们需生成迷宫。在生成迷宫的过程…

【Go】三、Go指针

文章目录 1、指针2、说明 1、指针 &符号变量 就可以获取这个变量内存的地址*int 是一个指针类型 &#xff08;可以理解为 指向int类型的指针&#xff09; package main import("fmt" ) func main(){var age int 18//&符号变量 就可以获取这个变量内存的地…

武汉星起航:一站式跨境电商服务,助力企业扬帆远航

武汉星起航电子商务有限公司&#xff0c;作为业界知名的自营亚马逊跨境电商与孵化服务提供商&#xff0c;凭借优质的服务和卓越的口碑&#xff0c;赢得了众多企业的信赖与青睐。公司以其独特的一站式跨境电商服务优势&#xff0c;为合作伙伴提供了全方位、个性化的解决方案&…

[RAM] 3D RAM 能否复制 3D NAND 神话?

主页&#xff1a; 元存储博客 文章目录 前言挑战Lam Research 3D RAMNeo 3D X-RAM展望 前言 人工智能时代&#xff0c;DRAM的容量扩展受到限制&#xff0c; 需要迫切解决&#xff0c;以满足应用的要求[2]。 3D DRAM是指以垂直方向存储位的体系结构&#xff0c;类似于3D NAND[…