Python环境下基于1D-CNN的轴承故障诊断及TSNE特征可视化
1D CNN 处理一维信号具有显著优势,已在很多领域得到初步应用:
心电图监测:将1DCNN应用于心脏病监测,其方法是针对每一个心脏病人的,即对于每个心律失常患者使用该患者特有的训练数据,专门训练出一个紧凑的1DCNN对心脏跳动数据进行实时监测,并分为起源于窦性模式的搏动、室上异位搏动、室性异位搏动、融合搏动和不可归类的节拍等5个心脏跳动状态。

建筑结构健康监测:有学者将1DCNN应用于建筑结构健康监测,通过在5m×6m的试验结构件上安装30个加速度计,每个加速度计负责监测其所属区域,结构的损失通过松动连接螺栓来模拟,该基于1DCNN的损伤监测方法可以在大量的单损伤和双损伤情况下进行性能测试,均取得了优异的监测效果;有学者将1DCNN和无线传感网络相结合,使其能够分析由三轴无线传感器测得的加速度信号,这样做是为了确定损伤敏感特征更加明显的方向。针对实验室结构引入的多种损伤场景,对改进的损伤检测技术进行了测试,试验结果表明,该方法能够从结构的环境振动响应中直接检测和定位损伤。
人体运动识别:有学者采用1DCNN提取可穿戴设备信号中人体运动特征,对人体不同的运动如骑车、打电话、吃早饭等进行准确识别;有学者利用三轴加速度计采集的数据,先经过巴特沃斯滤波器进行低通滤波,然后直接输入1DCNN进行人体行为识别,在11种人体活动的识别中平均准确率达到了98.7%。
语音识别:有学者针对2DCNN不能很好地反映出语音信号的一维特性,提出采用1DCNN进行车载语音识别,对比试验结果表明,1DCNN的识别准确率比2DCNN提高了10%—20%,在噪声环境下的泛化性能也明显优于后者。
鉴于此,提出一种基于1D-CNN的轴承故障诊断方法,并进行了TSNE特征可视化,运行环境为Python,采用部分西储大学轴承数据集,采用模块如下:
import scipy.io # To use the '.mat' files
import seaborn as sns
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential,Model
from tensorflow.keras.layers import Input,Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D,Conv1D,MaxPooling1D
from sklearn.metrics import confusion_matrix
from sklearn.manifold import TSNE
重要模块版本如下:
tensorflow版本2.8.0
keras版本2.8.0
sklearn版本1.0.2
部分代码如下:
#############################################################CWRU_Bearing_1D_CNN基于1D-CNN德轴承故障识别
import scipy.io
import seaborn as sns
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
#加载轴承振动数据前处理生成的0hp_all_faults.csv文件
df = pd.read_csv('0hp_all_faults.csv')from sklearn.preprocessing import LabelEncoder
from tensorflow.keras.utils import to_categoricalwin_len=784 #窗口长度
stride=300 #移动步长#设置训练数据X及标签Y
X=[]
Y=[]for k in df['fault'].unique():df_temp_2 = df[df['fault']==k]for i in np.arange(0,len(df_temp_2)-(win_len),stride):temp = df_temp_2.iloc[i:i+win_len,:-1].valuestemp = temp.reshape((1,-1))X.append(temp)Y.append(df_temp_2.iloc[i+win_len,-1])X=np.array(X)
X=X.reshape((X.shape[0],-1,1))
#X = np.repeat(X, 3, axis=3) # To repeat into 3 chanel formatY=np.array(Y)
encoder= LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
OHE_Y = to_categorical(encoded_Y)X.shape
#训练集和测试集划分
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,OHE_Y,test_size=0.3,shuffle=True)from tensorflow.keras.models import Sequential,Model
from tensorflow.keras.layers import Input,Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D,Conv1D,MaxPooling1D#构建1D-CNN网络
no_classes = len(df['fault'].unique())cnn_model = Sequential()
cnn_model.add(Conv1D(filters=64, kernel_size=100, activation='relu', input_shape=(X.shape[1],X.shape[2])))
cnn_model.add(Conv1D(filters=32, kernel_size=50, activation='relu'))cnn_model.add(MaxPooling1D(pool_size=4))
cnn_model.add(Flatten())
cnn_model.add(Dense(100, activation='relu'))cnn_model.add(Dense(no_classes, activation='softmax'))cnn_model.summary()cnn_model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy'])#开始训练网络
batch_size =300
epochs = 10
history = cnn_model.fit(X_train, y_train, batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(X_test,y_test),shuffle=True)#绘制混淆矩阵
def inv_Transform_result(y_pred): y_pred = y_pred.argmax(axis=1)y_pred = encoder.inverse_transform(y_pred)return y_predy_pred=cnn_model.predict(X_test)Y_pred=inv_Transform_result(y_pred)
Y_test = inv_Transform_result(y_test)from sklearn.metrics import confusion_matrixplt.figure(figsize=(10,10))
cm = confusion_matrix(Y_test, Y_pred,normalize='true')
f = sns.heatmap(cm, annot=True,xticklabels=encoder.classes_,yticklabels=encoder.classes_)
plt.show()dummy_cnn = Model(inputs=cnn_model.input,outputs=cnn_model.layers[5].output)
y_viz = dummy_cnn.predict(X_train)# TSNE可视化
from sklearn.manifold import TSNEX_t_sne = TSNE(n_components=2, learning_rate='auto',verbose=1, perplexity=40, n_iter=300).fit_transform(y_viz)tSNEdf = pd.DataFrame(data = X_t_sne, columns = ['T-SNE component 1', 'T-SNE component 2'])tSNEdf['Fault']=inv_Transform_result(y_train)#绘制第一主成分和第二主成分
fig, ax = plt.subplots(figsize=(10,10))
sns.scatterplot(x=tSNEdf['T-SNE component 1'],y=tSNEdf['T-SNE component 2'],hue='Fault',data=tSNEdf,legend="full",alpha=0.3)
plt.show()
部分出图如下:





完整代码:Python环境下基于1D-CNN的轴承故障诊断及TSNE特征可视化
工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。
相关文章:
Python环境下基于1D-CNN的轴承故障诊断及TSNE特征可视化
1D CNN 处理一维信号具有显著优势,已在很多领域得到初步应用: 心电图监测:将1DCNN应用于心脏病监测,其方法是针对每一个心脏病人的,即对于每个心律失常患者使用该患者特有的训练数据,专门训练出一个紧凑的…...
进程的调度,原则,算法
进程调度 进行上下问切换的时候根据什么原则来切换进程呢 进程的什么周期什么时候进行调度 调度原则 评价指标,作为调度算法的参考 调度算法的实现的标准 响应时间越小越好,平均响应时间的波动越小越好,稳定 (不能忽大忽小&am…...
瑞_23种设计模式_状态模式
文章目录 1 状态模式(State Pattern)1.1 介绍1.2 概述1.3 状态模式的结构1.4 状态模式的优缺点1.5 状态模式的使用场景 2 案例一2.1 需求2.2 代码实现(未使用状态模式)2.3 代码实现(状态模式) 3 案例二3.1 …...
system Verilog:clocking中定义信号为input和output的区别
在SystemVerilog中,clocking块用于定义时钟块,这通常用于描述时钟边缘和同步的输入/输出行为,特别是在测试平台和硬件接口描述中。 在下述两个代码示例中,主要区别在于a被定义为一个input还是output。 当a被定义为input时&#x…...
JAVA_Tomcat
Tomcat 使用教程 1.下载: http://tomcat.apache.org/ 2.安装: 解压压缩包(安装目录不要有中文) 3.卸载: 删除目录即可 4.启动: 运行./bin/startup.sh1.黑窗口一闪而过: 没有配置好JDK环境变量2.启动报错(查看日志文件): 端口占用 5.关闭: 1.强制关闭: 点击窗口关闭按钮2.正常…...
uniapp运行项目到微信小程序报错——未找到[“sitemapLocation“]
效果图 解决方式 重新运行项目即可;...
pytorch升级打怪(八)
保存模型和加载已有模型 保存并加载模型保存加载 保存并加载模型 在本节中,我们将研究如何通过保存、加载和运行模型预测来保持模型状态。 import torch import torchvision.models as models保存 PyTorch模型将学习的参数存储在内部状态字典中,称为s…...
全智能深度演进,一键成片让视频创作颠覆式提效
全智能一键成片,让内容创作的「边际成本」逼近于零。 大模型和AIGC技术的发展,可以用“日新月异”来形容,其迭代速度史无前例,涌现出的各类垂直应用模型,也使得音视频行业的应用场景更加广泛和多样化。 然而ÿ…...
uniapp(vue3) H5页面连接打印机并打印
一、找到对应厂商打印机的驱动并在windows上面安装。查看是否安装完成可以在:控制面板->查看设备和打印机,找到对应打印机驱动是否安装完成 二、打印机USB连接电脑 三、运行代码调用浏览器打印,主要使用的是window.print()功能。下面使用…...
Android视角看鸿蒙第八课(module.json5中的各字段含义之abilities)下
Android视角看鸿蒙第八课(module.json5中的各字段含义之abilities)下 导读 上篇文章开始学习abilities下的各字段含义,因为篇幅原因只学习了name、srcEntry、description、icon和label字段的含义和用法, 这篇文章继续学习和了解其他字段。 …...
设计模式 适配器模式
1.背景 适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是 220V,日本是 110V,但是这…...
前端面试题详解
前端面试 1.app如何实现登陆成功,卸载app重新安装再进入获取上一次已经登陆的信息? 要实现前端APP在登录成功后,即使卸载并重新安装也能获取上一次已经登录的信息,通常涉及以下几个关键步骤: 1. 使用持久化存储 在APP…...
抖音,剪映,TikTok,竖屏短视频转场pr模板视频素材
120个叠加效果视频转场过渡素材,抖音,剪映,TikTok,短视频转场pr模板项目工程文件。 效果:VHS、光效、胶片、霓虹灯闪光、X射线、信号、老电影等。 适用软件:Adobe Premiere Pro 2018 12.0或更高版本。 视频素材与大多数应用程序兼容ÿ…...
python网络相册设计与实现flask-django-nodejs-php
此系统设计主要采用的是python语言来进行开发,采用django框架技术,框架分为三层,分别是控制层Controller,业务处理层Service,持久层dao,能够采用多层次管理开发,对于各个模块设计制作有一定的安…...
设计模式: 外观模式
文章目录 一、什么是外观模式二、外观模式结构1、外观模式的主要角色包括:2、外观模式通常适用于以下情况: 三、优点 一、什么是外观模式 外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口&…...
Samba局域网共享文件
基于两个协议:smb协议(Server Message Block,服务消息块)和cifs协议(Common Internet File System,通用互联网文件系统) 两个主进程:smbd 和nmbd进程。 smbd:提供对服务…...
基于FPGA实现的UDP协议栈设计_汇总
基于FPGA实现的千兆以太网UDP协议栈设计(汇总篇) 1. MAC设计 2. IP层设计 3. ARP层设计 4. UDP层设计 5. ICMP层设计 6. 仲裁器设计 8. RGMII接口设计 9. 跨时钟域设计...
maven手动上传的第三方包 打包项目报错 Could not find xxx in central 解决办法
背景: 在Maven私服手动上传了第三方的jar包, 只有jar包, 没有pom文件, 项目在ide中可以正常编译启动,但打包报错无法找到jar包 解决办法: 上传jar包的时候, 点击生成pom. 则打包的时候不会报错...
利用Scala与Apache HttpClient实现网络音频流的抓取
概述 在当今数字化时代,网络数据的抓取和处理已成为许多应用程序和服务的重要组成部分。本文将介绍如何利用Scala编程语言结合Apache HttpClient工具库实现网络音频流的抓取。通过本文,读者将学习如何利用强大的Scala语言和Apache HttpClient库来抓取网…...
Linux(openEuler)部署SpringBoot前后端分离项目(Nginx负载均衡)
假如数据库在本地,没有放在Linux中 1.先把数据库中root的主机改成% 2.项目中的数据库链接配置换成本机ip 3.打包 4.把打包好的jar包放到Linux中 一般把jar包放到opt下 5.把前端部分拷贝到Linux的nginx中 5.1在package.json中修改build的值为图中这样 5.2同时由于在…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
