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

2024-01-15 09:28

本文主要是介绍Python轴承故障诊断 (11)基于VMD+CNN-BiGRU-Attenion的故障分类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

往期精彩内容:

前言

模型整体结构

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

2 轴承故障数据的预处理

2.1 导入数据

2.2 故障VMD分解可视化

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

3 基于VMD-CNN-BiGRU-Attenion的轴承故障诊断分类

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

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

前言

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

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

模型整体结构

模型整体结构如下所示:

  1. VMD分解:

  • 输入:轴承振动信号

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

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

  1. CNN特征提取:

  • 输入:VMD分解得到的IMFs

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

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

  1. BiGRU-Attention时序特征提取:

  • 输入:CNN提取的特征序列

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

  • 输出:经BiGRU-Attention处理后的时序特征表示,具有更好的时序建模能力

  1. 特征增强:

  • 输入:BiGRU-Attention提取的时序特征

  • 操作:可以采用归一化、降维、特征融合等方法对特征进行增强,提高模型性能和泛化能力

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()

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-BiGRU-Attenion的轴承故障诊断分类

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

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

3.2 设置参数,训练模型

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

注意调整参数:

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

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

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

3.3 模型评估

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

故障十分类混淆矩阵:

代码、数据如下:

这篇关于Python轴承故障诊断 (11)基于VMD+CNN-BiGRU-Attenion的故障分类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608410

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数