CNN-BiLSTM-SelfAttention时空特征融合多头自注意力机制的故障识别程序,数据由Excel导入,直接运行!

文摘   教育   2024-12-13 09:18   江苏  
适用平台:Matlab2023及以上

本程序参考中文EI期刊《基于CNN-BiLSTM 的滚动轴承变工况故障诊断方法》,程序注释清晰,干货满满,下面对文章和程序做简要介绍

  在CNN-BiLSTM-SelfAttention故障识别模型中,结合了卷积神经网络(CNN)、双向长短时记忆网络(BiLSTM)和多头自注意力(MultiHead SelfAttention)这三个部分,各部分在故障识别的特征提取过程中发挥着不同的作用。以下是它们的详细介绍:

卷积神经网络(CNN):

局部特征提取:CNN在故障识别中的作用主要是通过卷积操作来提取输入数据中的局部特征。对于传感器数据或时间序列数据而言,这些局部特征可能代表了信号中的某些模式或异常。通过卷积层,模型可以自动学习这些局部特征,使得模型能够更好地理解数据中的局部结构,从而更容易检测到潜在的故障信号。

双向长短时记忆网络(BiLSTM):

长期依赖建模:标准LSTM 网络通过引入记忆单元和门控机制结构可以更好地捕捉和记忆序列数据中的长期依赖关系。但其只有前向传播运算,缺乏前后的逻辑性。双向长短时记忆网络(BiLSTM)是在LSTM的基础上,利用已知时间序列和反向位置序列,通过前向和反向传播双向运算,加深对原序列时序特征提取,提高模型输出结果的准确性。BiLSTM神经网络最后输出是前向、反向传播的LSTM输出结果之和。

多头自注意力(SelfAttention):

全局依赖建模:在特征提取的过程中,并不是提取到的所有故障特征都有助于故障诊断。为了提高故障诊断的正确率,因此在特征提取时,有必要引入注意力机制对其进行筛选在故障识别中,某些异常可能涉及到序列中的多个位置,而不仅仅是局部特定的部分。通过引入多头自注意力,模型能够同时关注序列中的不同部分,更好地捕捉全局依赖关系,从而提高对于整体序列模式的感知能力。

  结合这三种层的结构,模型首先通过CNN层来捕捉输入故障序列的空间特征,然后通过双向BiLSTM层来捕捉故障序列时序相关性,最后通过Self-Attention层来更好地理解序列内部的关联。这种综合结构可以更全面地处理故障序列数据。

  适用于各种数据分类场景,如滚动轴承故障、变压器油气故障、电力系统输电线路故障区域、绝缘子、配网、电能质量扰动,等领域的识别、诊断和分类。
  它的创新点在于综合了不同类型的神经网络层,使其适用于广泛的应用,从而提高了对故障序列数据的建模和分析能力,程序展示准确率、精确率、召回率、F1分数等计算结果。

以下是程序的输出结果:

混淆矩阵:

训练集和测试集的散点图:

评价指标计算:

部分代码:
%%  随机划分训练集和测试集temp = randperm(400);% 训练集——400个样本 P_train = data(temp(1:350),1:20)';T_train = data(temp(1:350),21)';M = size(P_train,2);% 测试集——50个样本P_test = data(temp(351:end),1:20)';T_test = data(temp(351:end),21)';N = size(P_test,2);
%% 数据归一化[p_train, ps_input] = mapminmax(P_train,0,1);p_test = mapminmax('apply',P_test,ps_input);t_train = T_train;t_test = T_test;
%% 数据平铺p_train = double(reshape(p_train,20,1,1,M));p_test = double(reshape(p_test,20,1,1,N));t_train = categorical(t_train)';t_test = categorical(t_test)';
%% 构造CNN-BiLSTM-Attention网络layers = [ imageInputLayer([20 1 1],"Name","imageinput") convolution2dLayer([2 1],16,"Name","conv_1") batchNormalizationLayer("Name","batchnorm_1") reluLayer("Name","relu_1") maxPooling2dLayer([2 1],"Name","maxpool_1") convolution2dLayer([2 1],32,"Name","conv_2") batchNormalizationLayer("Name","batchnorm_2") reluLayer("Name","relu_2") maxPooling2dLayer([2 1],"Name","maxpool_2")
部分图片来源于网络,侵权联系删除!

完整代码:https://mbd.pub/o/bread/ZZeTkptq

欢迎感兴趣的小伙伴点击阅读原文上方链接获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~

创新优化及预测代码
免费分享研究理论及方法,基础代码资料,努力提供电力系统相关专业预测及优化研究领域的创新性代码,保质保量!面包多地址:https://mbd.pub/o/yc_yh/work
 最新文章