当前位置:   article > 正文

Python轴承故障诊断 (十)基于VMD+CNN-Transfromer的故障分类_vmd处理轴承数据python代码

vmd处理轴承数据python代码

目录

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

2 轴承故障数据的预处理

2.1 导入数据

2.2 故障VMD分解可视化

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

3.1 定义VMD-CNN-Transformer分类网络模型

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博客

前言

本文基于凯斯西储大学(CWRU)轴承数据,进行变分模态分解VMD的介绍与数据预处理,最后通过Python实现VMD+CNN-Transformer对故障数据的分类。凯斯西储大学轴承数据的详细介绍可以参考下文:

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

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 基于VMD+CNN-Transformer的轴承故障诊断分类

下面基于VMD分解后的轴承故障数据,先通过CNN进行卷积池化操作提取信号的特征,增加维度,缩短序列长度,然后再送入Transformer编码器层增强特征,实现CNN-Transformer信号的分类方法进行讲解:

3.1 定义VMD-CNN-Transformer分类网络模型

3.2 设置参数,训练模型

50个epoch,准确率将近99%,用VMD+CNN-Transformer网络分类效果显著,CNN-Transformer模型能够充分提取轴承故障信号的全局空间和局部特征,收敛速度快,性能特别优越,继续调参可以进一步提高分类准确率。

注意调整参数:

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

  • 调整Transformer编码器层数和维度数,增加更多的 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/ZZmYlJht

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

闽ICP备14008679号