Python轴承故障诊断 (十)基于VMD+CNN |
您所在的位置:网站首页 › 轴承42307K › Python轴承故障诊断 (十)基于VMD+CNN |
目录 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包的下载安装: # 下载 pip install vmdpy # 导入 from vmdpy import VMD第二步,导入相关包进行分解 import numpy as np import matplotlib.pyplot as plt from vmdpy import VMD # -----测试信号及其参数--start------------- t = np.linspace(0, 1, 1000) signal = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 20 * t) T = len(signal) fs = 1/T t = np.arange(1,T+1)/T # alpha 惩罚系数;带宽限制经验取值为抽样点长度1.5-2.0倍. # 惩罚系数越小,各IMF分量的带宽越大,过大的带宽会使得某些分量包含其他分量言号; alpha = 2000 #噪声容限,一般取 0, 即允许重构后的信号与原始信号有差别。 tau = 0 #模态数量 分解模态(IMF)个数 K = 5 #DC 合成信号若无常量,取值为 0;若含常量,则其取值为 1 # DC 若为0则让第一个IMF为直流分量/趋势向量 DC = 0 #初始化ω值,当初始化为 1 时,均匀分布产生的随机数 # init 指每个IMF的中心频率进行初始化。当初始化为1时,进行均匀初始化。 init = 1 #控制误差大小常量,决定精度与迭代次数 tol = 1e-7 # -----测试信号及其参数--end---------- # Apply VMD # 输出U是各个IMF分量,u_hat是各IMF的频谱,omega为各IMF的中心频率 u, u_hat, omega= VMD(signal, alpha, tau, K, DC, init, tol) #得到中心频率的数值 print(omega[-1]) # Plot the original signal and decomposed modes plt.figure(figsize=(15,10)) plt.subplot(K+1, 1, 1) plt.plot(t, signal, 'r') plt.title("原始信号") for num in range(K): plt.subplot(K+1, 1, num+2) plt.plot(t, u[num,:]) plt.title("IMF "+str(num+1)) plt.show() 参考之前的文章,进行故障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信号的分类方法进行讲解:
50个epoch,准确率将近99%,用VMD+CNN-Transformer网络分类效果显著,CNN-Transformer模型能够充分提取轴承故障信号的全局空间和局部特征,收敛速度快,性能特别优越,继续调参可以进一步提高分类准确率。 注意调整参数: 可以适当增加CNN层数和隐藏层的维度,微调学习率; 调整Transformer编码器层数和维度数,增加更多的 epoch (注意防止过拟合) 可以改变维信号堆叠的形状(设置合适的长度和维度) 3.3 模型评估准确率、精确率、召回率、F1 Score
故障十分类混淆矩阵:
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |