声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
数据介绍与故障诊断讲解
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
其他更多需求或想要的代码均可点击下方小卡片后后台私信,看到后会秒回~
更多代码链接:更多代码链接