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

news/2024/7/21 4:55:52 标签: cnn, 人工智能, 神经网络, excel, matlab, 深度学习, 算法

适用平台: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

部分图片来源于网络,侵权联系删除!

欢迎感兴趣的小伙伴关注下方公众号获得完整版代码,小编会继续推送更有质量的学习资料、文章和程序代码!


http://www.niftyadmin.cn/n/5205877.html

相关文章

VivadoAndTcl: eval

用于拼接执行多个命令。后面可以接一个或者多个参数,如果是一个参数,则把这个参数当做命令来执行,如果是多个参数,则将多个参数用concat命令连接起来后再执行。 举例如下: # 一个参数的情况 set do {set var0 {hello…

视频云存储EasyCVR平台国标接入获取通道设备未回复是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

opencv-常用代码

以下是一些OpenCV中常用的代码片段,涵盖了一些基本的图像处理和计算机视觉任务。 加载和显示图像: import cv2# 读取图像 img cv2.imread(image.jpg)# 显示图像 cv2.imshow(Image, img) cv2.waitKey(0) cv2.destroyAllWindows()调整图像大小: resized_img cv2.res…

3:kotlin 逻辑控制(Control flow)

向其他语言一样,kotlin也有循环和逻辑控制 条件判断(Conditional expressions) kotlin使用if和when来进行条件判断 如果纠结选择if还是when,建议使用when,因为它更能提高程序的健壮性 if 普通写法 fun main() {val…

Vue 发布到服务器,页面刷新404,访问后端404,解决办法

Vue 发布到服务器,页面刷新404,访问后端404,解决办法 //在vue中配置的VUE_APP_BASE_API: /dev-api ## nginx配置 #代理目标的链接location /dev-api/ {proxy_pass http://192.168.110.119:38080/; proxy_connect_timeout 60;proxy_read_tim…

浮点数运算精度丢失,如何解决

为什么浮点数运算的时候会有精度丢失的风险? 浮点数运算精度丢失代码演示: float a 2.0f - 1.9f; float b 1.8f - 1.7f; System.out.println(a);// 0.100000024 System.out.println(b);// 0.099999905 System.out.println(a b);// false为什么会出现…

北航计算机学院 嵌入式系统实验踩坑

今天上课在实验室配置交叉编译环境时,用机房的电脑一次就配成功了,但是下课后用自己的电脑装了一个虚拟机安装了Ubuntu 22.04系统,却怎样也配不成功,后面仔细阅读文档才发现,交叉编译环境arm-linux-gcc居然是32位的&am…

2023亚太地区数学建模C题思路分析+模型+代码+论文

目录 1.2023亚太地区各题思路模型:比赛开始后,第一时间更新,获取见文末名片 3 常见数模问题常见模型分类 3.1 分类问题 3.2 优化问题 详细思路见此名片,开赛第一时间更新 1.亚太地区数学建模ABC题思路模型:9比赛开…