基于机器学习和深度学习的轴承故障诊断方法(Python)

在工业早期,设备故障诊断通常由专家通过观察设备运行中的变量参数并结合自身知识进行诊断。但相比传统的机理分析方法,数据驱动的智能设备故障诊断更能充分提取数据中隐含的故障征兆、因果逻辑等关系。智能设备故障诊断的优势表现在其对海量、多源、高维数据进行统计分析和信息提取的直接性和有效性。该技术以采集不同来源、不同类型的监测数据作为基底,利用各种数据挖掘技术获取其中隐含的有用信息,表征系统运行的模式和状态,进而达到检测与诊断的目的。整体诊断过程可分为信号获取、特征工程、故障分类3个模块。

信号获取负责对检测数据进行采样分段,特征工程用于提取数据特征,最后通过故障分类模块对设备故障状态进行诊断。智能设备故障诊断方法的性能极大地依赖于所提取的特征质量,即数据的表示学习能力,而传统的特征学习方法存在以下4个方面的不足:(1)特征提取方法的设计依赖专家对该领域的先验信息、专业知识和深厚的数学基础。(2)特征提取能力有限,模型提取的大多是浅层特征,在面对复杂分类问题时,其泛化能力受到一定制约。(3)特征提取方法健壮性弱,容易受机械系统的物理特性和故障条件变化影响而改变模型组件以及评价标准。(4)不能提取未知特征,特征提取源于已有特征和评估标准,对新特征的挖掘具有局限性。

程序运行环境为Python,采用tensorflow,keras和sklearn等模块,执行基于机器学习和深度学习模型的滚动轴承故障诊断。主要内容包括:

[1]基于一维深度残差收缩网络DRSN的轴承故障诊断

[2]基于蝴蝶优化算法优化支持向量机的轴承故障诊断

[3]基于门控循环单元GRU,Inception网络,LSTM网络,随机森林的轴承故障诊断。

Inception网络为例,运行代码如下:

from time import sleep
from tensorflow import keras
import ovs_preprocess
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
import random
import tensorflow.keras as keras
import tensorflow.keras.layers as layers
from datetime import datetime
import numpy as np
import tensorflow as tf
from sklearn.manifold import TSNE#如果是GPU,需要去掉注释,如果是CPU,则注释
# gpu = tf.config.experimental.list_physical_devices(device_type='GPU')
# assert len(gpu) == 1
# tf.config.experimental.set_memory_growth(gpu[0], True)def subtime(date1, date2):return date2 - date1num_classes = 10    # 样本类别
length = 784        # 样本长度
number = 300  # 每类样本的数量
normal = True  # 是否标准化
rate = [0.5, 0.25, 0.25]  # 测试集验证集划分比例path = r'data/0HP'
x_train, y_train, x_valid, y_valid, x_test, y_test = ovs_preprocess.prepro(d_path=path,length=length,number=number,normal=normal,rate=rate,enc=False, enc_step=28)x_train = np.array(x_train)
y_train = np.array(y_train)
x_valid = np.array(x_valid)
y_valid = np.array(y_valid)
x_test = np.array(x_test)
y_test = np.array(y_test)print(x_train.shape)
print(x_valid.shape)
print(x_test.shape)
print(y_train.shape)
print(y_valid.shape)
print(y_test.shape)y_train = [int(i) for i in y_train]
y_valid = [int(i) for i in y_valid]
y_test = [int(i) for i in y_test]# 打乱顺序
index = [i for i in range(len(x_train))]
random.seed(1)
random.shuffle(index)
x_train = np.array(x_train)[index]
y_train = np.array(y_train)[index]index1 = [i for i in range(len(x_valid))]
random.shuffle(index1)
x_valid = np.array(x_valid)[index1]
y_valid = np.array(y_valid)[index1]index2 = [i for i in range(len(x_test))]
random.shuffle(index2)
x_test = np.array(x_test)[index2]
y_test = np.array(y_test)[index2]print(x_train.shape)
print(x_valid.shape)
print(x_test.shape)
print(y_train)
print(y_valid)
print(y_test)
print("x_train的最大值和最小值:", x_train.max(), x_train.min())
print("x_test的最大值和最小值:", x_test.max(), x_test.min())x_train = tf.reshape(x_train, (len(x_train), 784, 1))
x_valid = tf.reshape(x_valid, (len(x_valid), 784, 1))
x_test = tf.reshape(x_test, (len(x_test), 784, 1))# 保存最佳模型
class CustomModelCheckpoint(keras.callbacks.Callback):def __init__(self, model, path):self.model = modelself.path = pathself.best_loss = np.infdef on_epoch_end(self, epoch, logs=None):val_loss = logs['val_loss']if val_loss < self.best_loss:print("\nValidation loss decreased from {} to {}, saving model".format(self.best_loss, val_loss))self.model.save_weights(self.path, overwrite=True)self.best_loss = val_loss# t-sne初始可视化函数
def start_tsne():print("正在进行初始输入数据的可视化...")x_train1 = tf.reshape(x_train, (len(x_train), 784))X_tsne = TSNE().fit_transform(x_train1)plt.figure(figsize=(10, 10))plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y_train)plt.colorbar()plt.show()# start_tsne()
# sleep(600000)def inception_block(input, input_filter, output_filter):reception_filter = output_filterprint('reception_filter', reception_filter)r1 = layers.Conv1D(filters=reception_filter, kernel_size=1, activation='relu', padding='same')(input)r1 = layers.BatchNormalization()(r1)r3 = layers.Conv1D(filters=reception_filter, kernel_size=3, activation='relu', padding='same')(input)r3 = layers.BatchNormalization()(r3)r5 = layers.Conv1D(filters=reception_filter, kernel_size=5, activation='relu', padding='same')(input)r5 = layers.BatchNormalization()(r5)mx = tf.keras.layers.MaxPool1D(pool_size=3, strides=1, padding="same")(input)mx = layers.Conv1D(filters=reception_filter, kernel_size=1, activation='relu', padding='same')(mx)output = tf.keras.layers.concatenate([r1, r3, r5, mx], axis=-1)output = layers.Conv1D(filters=reception_filter, kernel_size=3, activation='relu', padding='same')(output)print('output', output.shape)return outputx_train = tf.reshape(x_train, (len(x_train), 49, 16))
x_valid = tf.reshape(x_valid, (len(x_valid), 49, 16))
x_test = tf.reshape(x_test, (len(x_test), 49, 16))# 模型定义
def mymodel():inputs = keras.Input(shape=(x_train.shape[1], x_train.shape[2]))h1 = inception_block(inputs, 32, 32)h1 = layers.Dropout(0.5)(h1)h1 = layers.Flatten()(h1)h1 = layers.Dense(32, activation='relu')(h1)h1 = layers.Dense(10, activation='softmax')(h1)deep_model = keras.Model(inputs, h1, name="cnn")return deep_modelmodel = mymodel()model.summary()
startdate = datetime.utcnow()  # 获取当前时间# 编译模型
model.compile(optimizer=keras.optimizers.Adam(),loss='sparse_categorical_crossentropy',metrics=['accuracy'])history = model.fit(x_train, y_train,batch_size=256, epochs=50, verbose=1,validation_data=(x_valid, y_valid),callbacks=[CustomModelCheckpoint(model, r'best_sign_inception.h5')])#加载模型
model.load_weights(filepath='best_sign_inception.h5')
# 编译模型
model.compile(loss='sparse_categorical_crossentropy', optimizer=keras.optimizers.Adam(), metrics=['accuracy'])
# 评估模型
scores = model.evaluate(x_test, y_test, verbose=1)
print('%s: %.2f%%' % (model.metrics_names[1], scores[1] * 100))y_predict = model.predict(x_test)
y_pred_int = np.argmax(y_predict, axis=1)
print(y_pred_int[0:5])
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred_int, digits=4))def acc_line():# 绘制acc和loss曲线acc = history.history['accuracy']val_acc = history.history['val_accuracy']loss = history.history['loss']val_loss = history.history['val_loss']epochs = range(len(acc))  # Get number of epochs# 画accuracy曲线plt.plot(epochs, acc, 'r', linestyle='-.')plt.plot(epochs, val_acc, 'b', linestyle='dashdot')plt.title('Training and validation accuracy')plt.xlabel("Epochs")plt.ylabel("Accuracy")plt.legend(["Accuracy", "Validation Accuracy"])plt.figure()# 画loss曲线plt.plot(epochs, loss, 'r', linestyle='-.')plt.plot(epochs, val_loss, 'b', linestyle='dashdot')plt.title('Training and validation loss')plt.xlabel("Epochs")plt.ylabel("Loss")plt.legend(["Loss", "Validation Loss"])# plt.figure()plt.show()acc_line()# 绘制混淆矩阵
def confusion():y_pred_gailv = model.predict(x_test, verbose=1)y_pred_int = np.argmax(y_pred_gailv, axis=1)print(len(y_pred_int))con_mat = confusion_matrix(y_test.astype(str), y_pred_int.astype(str))print(con_mat)classes = list(set(y_train))classes.sort()plt.imshow(con_mat, cmap=plt.cm.Blues)indices = range(len(con_mat))plt.xticks(indices, classes)plt.yticks(indices, classes)plt.colorbar()plt.xlabel('guess')plt.ylabel('true')for first_index in range(len(con_mat)):for second_index in range(len(con_mat[first_index])):plt.text(first_index, second_index, con_mat[second_index][first_index], va='center', ha='center')plt.show()
完整代码可通过知乎学术咨询获得:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1
confusion()

图片

图片

图片

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI日报|跃问App上架加入AI助理竞争!GPTZero获千万美元A轮融资,创始人不到30岁!

文章推荐 AI日报&#xff5c;Luma推出AI视频模型&#xff0c;又一Sora级选手登场&#xff1f;SD3 Medium发布&#xff0c;图中文效果改善明显 AI日报&#xff5c;仅三个月就下架&#xff1f;微软GPT Builder出局AI竞争赛&#xff1b;马斯克将撤回对奥特曼的诉讼 ⭐️搜索“可…

WordPress如何删除内存中的缓存?

今天boke112百科将某篇文章修改分类和内容更新后&#xff0c;发现文章底部的相关文章显示的内容跟文章分类、标签毫无关系&#xff0c;还是显示原来的旧内容。后来查看YIA主题相关文章的代码&#xff0c;才发现相关文章的数据保存到内存中的&#xff0c;而且是永不过期&#xf…

『大模型笔记』Cohere的联合创始人Nick Frosst谈:AGI真的只是幻想吗?

Cohere的联合创始人Nick Frosst谈:AGI真的只是幻想吗? 文章目录 一. 内容总结所有话题缺失话题bullet pointsAGI(通用人工智能)的立场技术应用和现实世界问题Cohere公司及其活动Command-R模型及其功能检索增强生成(RAG)创始团队的背景工具使用的演变哲学探讨建设日活动开…

plsql执行插入sql时提示ora-00001违反唯一约束条件(cif.pk_ywxyys)

1.plsql执行插入sql时提示ora-00001违反唯一约束条件(cif.pk_ywxyys) 原因:因为表中已经存在了这个主键导致的 一般主键都是id,&#xff0c;可以用id值查是否存在这个主键&#xff0c;已存在这个id值的话想插入数据只能改要插的数据的id值了 找到表最大id值&#xff0c;把要插…

图知识蒸馏综述:算法分类与应用分析

源自&#xff1a;软件学报 作者&#xff1a;陈哲涵 黎学臻 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 图数据, 如引文网络, 社交网络和交通网络, 广泛地存在现实生活中. 图神经网络凭借强大的表现力受到广泛…

Appium+python自动化(九)- 定位元素工具(义结金兰的两位异性兄弟)(超详解) 密码保护

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 简介 环境搭建好了&#xff0c;其他方面的知识也准备的差不多了&#xff0c;那么我们就开始下一步元素定位&#xff0c;元素定位宏哥主要介绍如何使用uiautomatorviewer&#xff0c;通…

鸿蒙轻内核A核源码分析系列四(2) 虚拟内存

本文我们来熟悉下OpenHarmony鸿蒙轻内核提供的虚拟内存&#xff08;Virtual memory&#xff09;管理模块。 本文中所涉及的源码&#xff0c;以OpenHarmony LiteOS-A内核为例&#xff0c;均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_a 获取。如果涉及开发板…

Aigtek高压放大器在柔性爬行机器人驱动性能研究中的应用

实验名称&#xff1a;柔性爬行机器人的材料测试 研究方向&#xff1a;介电弹性体的最小能量结构是一种利用DE材料的电致变形与柔性框架形变相结合设计的新型柔性驱动器&#xff0c;所谓最小能量是指驱动器在平衡状态时整个系统的能量最小&#xff0c;当系统在外界的电压刺激下就…

10.Docker Compose容器编排

文章目录 Compose简介安装和卸载步骤核心概念compose文件两要素 使用步骤Compose常用命令微服务测试本地编码打包编写Dockerfile文件构建镜像 不使用Compose调试使用Compose调试WordPress测试验证增量更新 Compose简介 ​ docker建议我们每一个容器中只运行一个服务,因为docke…

Memcached深度解析:打造闪电般的数据存储

Memcached是一个高性能的分布式内存对象缓存系统&#xff0c;通过在内存中缓存数据和对象来减少访问数据库的次数&#xff0c;从而加速动态数据库驱动的网站。本文将全面介绍Memcached的基本概念、使用方法、主要作用以及注意事项。 一、Memcached简介 1. Memcached的起源 Me…

开源复刻apple 数学笔记;纯C++实现了ChatGLM系列模型;腾讯混元文生图模型发布新版本并开源训练代码

✨ 1: AI Math Notes AI Math Notes 是一个交互式绘图应用&#xff0c;可绘制并计算数学方程。 AI Math Notes 受到Apple在WWDC 2024上的“Math Notes”演启发&#xff0c;开发的一个互动式绘图应用程序&#xff0c;用户可以在画布上绘制数学方程。一旦方程被绘制完成&#x…

Win11升级24H2出现绿屏怎么办?这些方法帮你解决!

在Win11电脑操作中&#xff0c;用户为了体验24H2版本推出的新功能&#xff0c;所以要把系统版本升级为24H2版本。但升级过程中电脑却出现了绿屏问题&#xff0c;不清楚要怎么操作才能解决绿屏的问题&#xff1f;接下来小编给大家分享几种简单有效的解决方法&#xff0c;让大家能…

CSRF、XSS、盗链攻击解释

CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09; CSRF是什么 CSRF 是一种攻击方式&#xff0c;攻击者通过利用用户在已认证的应用程序中的身份&#xff0c;伪造用户的请求来执行未经授权的操作。 这种攻击可以导致用户在不知情的情况下完成…

氧化铈稳定氧化锆(Ce-TZP)性能优成本低 市场发展潜力较大

氧化铈稳定氧化锆&#xff08;Ce-TZP&#xff09;性能优成本低 市场发展潜力较大 CeO2稳定ZrO2&#xff0c;氧化铈稳定氧化锆&#xff0c;英文缩写Ce-TZP&#xff0c;一种陶瓷材料&#xff0c;是以氧化锆为基体&#xff0c;以氧化铈为稳定剂&#xff0c;制造而成的增韧陶瓷。 氧…

芯片封测从入门到精通

文章目录 &#x1f4d1;前言一、作者简介二、书籍亮点三、内容简介四、适读人群 &#x1f4d1;前言 在科技日新月异的今天&#xff0c;芯片作为现代电子设备的核心部件&#xff0c;其性能与可靠性直接决定了整个产品的竞争力。而芯片封测&#xff0c;作为确保芯片性能与可靠性…

Aspice介绍——测试流程

文章目录 ASPICE简介一、V字模型的示意二、测试领域2.1 SWE.6&#xff1a;软件合格性测试过程目的过程成果基本实践&#xff08;BP&#xff09; 2.2 SYS.4:系统集成和集成测试过程目的过程成果基本实践&#xff08;BP&#xff09; 2.3 SYS.5&#xff1a;系统合格性测试过程目的…

【Java】已解决java.lang.NullPointerException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.NullPointerException异常 一、问题背景 在Java编程中&#xff0c;java.lang.NullPointerException&#xff08;空指针异常&#xff09;是一种常见的运行时异常。当应…

一些个人电脑用的小工具软件

1 个人电脑信息管理 如下&#xff1b; 整理自己的电脑信息&#xff1b;录入&#xff0c;保存&#xff0c;查询&#xff1b;添加和更新界面如下&#xff0c; 每次添加、更新之后重新点一下菜单的浏览&#xff1b; 下载&#xff0c; https://download.csdn.net/download/bcb…

SpringBoot+Vue小区物业管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码2.查询小区信息代码3.保存缴费信息代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBootVue框架开发的小区物业管理系统。首先&#xf…