当前位置:   article > 正文

轴承故障诊断 (12)基于交叉注意力特征融合的VMD+CNN-BiLSTM-CrossAttention故障识别模型_vmd cnn bilstm

vmd cnn bilstm

目录

往期精彩内容:

前言

模型整体结构

1 变分模态分解VMD的Python示例

第一步,Python 中 VMD包的下载安装:

第二步,导入相关包进行分解

2 轴承故障数据的预处理

2.1 导入数据

2.2 故障VMD分解可视化

第一步, 模态选取

第二步,故障VMD分解可视化

2.3 故障数据的VMD分解预处理

3 交叉注意力机制

​编辑

3.1 Cross attention概念

3.2 Cross-attention算法 

3 基于VMD+CNN-BiLSTM-CrossAttention的轴承故障诊断分类

3.1 定义VMD+CNN-BiLSTM-CrossAttention分类网络模型

3.2 设置参数,训练模型

3.3 模型评估

故障十分类混淆矩阵:

代码、数据如下:


创新点:利用交叉注意力机制融合模型!

往期精彩内容:

Python-凯斯西储大学(CWRU)轴承数据解读与分类处理

Python轴承故障诊断 (一)短时傅里叶变换STFT

Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客

Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 pytorch-CSDN博客

Pytorch-LSTM轴承故障一维信号分类(一)_cwru数据集pytorch训练-CSDN博客

Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客

Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客

Python轴承故障诊断 (四)基于EMD-CNN的故障分类-CSDN博客

Python轴承故障诊断 (五)基于EMD-LSTM的故障分类-CSDN博客

Python轴承故障诊断 (六)基于EMD-Transformer的故障分类-CSDN博客

Python轴承故障诊断 (七)基于EMD-CNN-LSTM的故障分类-CSDN博客

Python轴承故障诊断 (八)基于EMD-CNN-GRU并行模型的故障分类-CSDN博客

基于FFT + CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客

基于FFT + CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客

大甩卖-(CWRU)轴承故障诊数据集和代码全家桶-CSDN博客

Python轴承故障诊断 (九)基于VMD+CNN-BiLSTM的故障分类-CSDN博客

Python轴承故障诊断 (十)基于VMD+CNN-Transfromer的故障分类-CSDN博客

Python轴承故障诊断 (11)基于VMD+CNN-BiGRU-Attenion的故障分类-CSDN博客

交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention轴承故障识别模型-CSDN博客

交叉注意力融合时域、频域特征的FFT + CNN-Transformer-CrossAttention轴承故障识别模型-CSDN博客

前言

本文基于凯斯西储大学(CWRU)轴承数据,进行变分模态分解VMD的介绍与数据预处理,最后通过Python实现基于交叉注意力CNN-BiLSTM-CrossAttention的时空特征融合模型对故障数据的分类。凯斯西储大学轴承数据的详细介绍可以参考下文:

Python-凯斯西储大学(CWRU)轴承数据解读与分类处理_cwru数据集时域图-CSDN博客

模型整体结构

模型整体结构如下所示:

  1.  VMD 分解:

  • 输入:轴承振动信号

  • 操作:通过VMD技术将原始信号分解成多个本征模态函数(IMF)

  • 输出:每个IMF表示不同频率范围内的振动成分

  1.  CNN 空间特征提取:

  • 输入:VMD分解得到的IMFs

  • 操作:对每个IMF进行卷积和池化操作,提取空间特征

  • 输出:卷积池化后的特征表示,用于捕获不同频率下的振动空间特征

  1.  BiLSTM 时序特征提取:

  • 输入:VMD分解得到的IMFs

  • 操作:双向LSTM网络学习序列信息,关注重要的时序特征

  • 输出:经BiLSTM处理后的时序特征表示,具有更好的故障信号时序建模能力

  1.  交叉注意力机制特征融合:

  • 输入:CNN提取的空间特征,BiLSTM提取的时序特征

  • 交叉注意力机制:使用交叉注意力机制融合时域和频域的特征。可以通过计算注意力权重,使得模型更关注重要的特征,提高模型性能和泛化能力

1 变分模态分解VMD的Python示例

第一步,Python 中 VMD包的下载安装:

  1. # 下载
  2. pip install vmdpy
  3. # 导入
  4. from vmdpy import VMD

第二步,导入相关包进行分解

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from vmdpy import VMD
  4. # -----测试信号及其参数--start-------------
  5. t = np.linspace(0, 1, 1000)
  6. signal = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 20 * t)
  7. T = len(signal)
  8. fs = 1/T
  9. t = np.arange(1,T+1)/T
  10. # alpha 惩罚系数;带宽限制经验取值为抽样点长度1.5-2.0倍.
  11. # 惩罚系数越小,各IMF分量的带宽越大,过大的带宽会使得某些分量包含其他分量言号;
  12. alpha = 2000
  13. #噪声容限,一般取 0, 即允许重构后的信号与原始信号有差别。
  14. tau = 0
  15. #模态数量 分解模态(IMF)个数
  16. K = 5
  17. #DC 合成信号若无常量,取值为 0;若含常量,则其取值为 1
  18. # DC 若为0则让第一个IMF为直流分量/趋势向量
  19. DC = 0
  20. #初始化ω值,当初始化为 1 时,均匀分布产生的随机数
  21. # init 指每个IMF的中心频率进行初始化。当初始化为1时,进行均匀初始化。
  22. init = 1
  23. #控制误差大小常量,决定精度与迭代次数
  24. tol = 1e-7
  25. # -----测试信号及其参数--end----------
  26. # Apply VMD
  27. # 输出U是各个IMF分量,u_hat是各IMF的频谱,omega为各IMF的中心频率
  28. u, u_hat, omega= VMD(signal, alpha, tau, K, DC, init, tol)
  29. #得到中心频率的数值
  30. print(omega[-1])
  31. # Plot the original signal and decomposed modes
  32. plt.figure(figsize=(15,10))
  33. plt.subplot(K+1, 1, 1)
  34. plt.plot(t, signal, 'r')
  35. plt.title("原始信号")
  36. for num in range(K):
  37. plt.subplot(K+1, 1, num+2)
  38. plt.plot(t, u[num,:])
  39. plt.title("IMF "+str(num+1))
  40. plt.show()

2 轴承故障数据的预处理

2.1 导入数据

参考之前的文章,进行故障10分类的预处理,凯斯西储大学轴承数据10分类数据集:

train_set、val_set、test_set 均为按照7:2:1划分训练集、验证集、测试集,最后保存数据

上图是数据的读取形式以及预处理思路

2.2 故障VMD分解可视化

第一步, 模态选取

根据不同K值条件下, 观察中心频率,选定K值;从K=4开始出现中心频率相近的模态,出现过分解,故模态数 K 选为4。

第二步,故障VMD分解可视化

2.3 故障数据的VMD分解预处理

3 交叉注意力机制

3.1 Cross attention概念

  • Transformer架构中混合两种不同嵌入序列的注意机制

  • 两个序列必须具有相同的维度

  • 两个序列可以是不同的模式形态(如:文本、声音、图像)

  • 一个序列作为输入的Q,定义了输出的序列长度,另一个序列提供输入的K&V

3.2 Cross-attention算法 

  • 拥有两个序列S1、S2

  • 计算S1的K、V

  • 计算S2的Q

  • 根据K和Q计算注意力矩阵

  • 将V应用于注意力矩阵

  • 输出的序列长度与S2一致

在融合过程中,我们将经过CNN卷积池化操作的空间特征作为查询序列,BiLSTM输出的时序特征作为键值对序列。通过计算查询序列与键值对序列之间的注意力权重,我们可以对不同特征之间的关联程度进行建模。

3 基于VMD+CNN-BiLSTM-CrossAttention的轴承故障诊断分类

下面基于VMD分解后的轴承故障数据,先把分解的分量通过CNN进行卷积池化操作提取信号的空间特征,然后同时把分量送入BiLSTM层提取时序特征,使用交叉注意力机制融合时域和频域的特征, 对特征进行增强,实现CNN-BiLSTM-CrossAttention信号的分类方法。

3.1 定义VMD+CNN-BiLSTM-CrossAttention分类网络模型

3.2 设置参数,训练模型

50个epoch,准确率将近98%,用VMD+CNN-BiLSTM-CrossAttention网络分类效果显著,模型能够充分提取轴承故障信号的空间和时序特征,收敛速度快,性能优越,精度高,交叉注意力机制能够对不同特征之间的关联程度进行建模,从故障信号频域、时域特征中属于提取出对模型识别重要的特征,效果明显,继续调参可以进一步提高分类准确率。

注意调整参数:

  • 可以适当增加CNN层数和隐藏层的维度,微调学习率;

  • 调整BiLSTM层数和维度数,增加更多的 epoch (注意防止过拟合)

  • 可以改变一维信号堆叠的形状(设置合适的长度和维度)

3.3 模型评估

准确率、精确率、召回率、F1 Score

故障十分类混淆矩阵:

代码、数据如下:

对数据集和代码感兴趣的,可以关注最后一行

  1. # 加载数据
  2. import torch
  3. from joblib import dump, load
  4. import torch.utils.data as Data
  5. import numpy as np
  6. import pandas as pd
  7. import torch
  8. import torch.nn as nn
  9. # 参数与配置
  10. torch.manual_seed(100) # 设置随机种子,以使实验结果具有可重复性
  11. device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
  12. #代码和数据集:https://mbd.pub/o/bread/ZZqXmp9x

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/694466
推荐阅读
相关标签
  

闽ICP备14008679号