基于深度学习的轴承寿命预测实践,开发CNN、融合LSTM/GRU/ATTENTION

news2025/8/1 10:21:10

关于轴承相关的项目之前做的大都是故障识别诊断类型的,少有涉及回归预测的,周末的时候宅家发现一个轴承寿命加速实验的数据集就想着拿来做一下寿命预测。

首先看下数据集如下:

直接百度即可搜到,这里就不再赘述了。

Learning_set为训练集

Test_set为测试集

我这里为了简单处理直接使用Learning_set作为总数据集,随机划分指定比例作为测试集。

当然了你也可以选择分别读取加载两部分的数据分别作为训练集和测试集都可以的。

每个目录下都是一堆csv文件,样例如下:

样例数据内容如下:

9,11,19,1.1879e+05,0.059,-0.372
9,11,19,1.1883e+05,0.603,-0.085
9,11,19,1.1887e+05,0.613,0.112
9,11,19,1.1891e+05,0.465,0.185
9,11,19,1.1894e+05,-0.216,-0.256
9,11,19,1.1898e+05,-0.806,0.177
9,11,19,1.1902e+05,-0.653,0.113
9,11,19,1.1906e+05,-0.007,0.398
9,11,19,1.191e+05,0.888,0.145
9,11,19,1.1914e+05,1.037,-0.542
9,11,19,1.1918e+05,0.299,-0.201
9,11,19,1.1922e+05,-0.552,-0.022
9,11,19,1.1926e+05,-1.237,0.264
9,11,19,1.193e+05,-1.059,0.155
9,11,19,1.1934e+05,-0.269,0.163
9,11,19,1.1937e+05,0.662,0.269
9,11,19,1.1941e+05,0.949,0.078
9,11,19,1.1945e+05,0.403,-0.065
9,11,19,1.1949e+05,-0.279,-0.411
9,11,19,1.1953e+05,-0.856,0.033
9,11,19,1.1957e+05,-0.736,0.201
9,11,19,1.1961e+05,0.098,0.326
9,11,19,1.1965e+05,0.718,-0.183
9,11,19,1.1969e+05,0.61,-0.038
9,11,19,1.1973e+05,0.201,0.092
9,11,19,1.1976e+05,-0.3,0.01
9,11,19,1.198e+05,-0.378,0.447
9,11,19,1.1984e+05,0.149,-0.189
9,11,19,1.1988e+05,0.499,-0.421
9,11,19,1.1992e+05,0.325,0.024
9,11,19,1.1996e+05,-0.265,0.49
9,11,19,1.2e+05,-0.708,0.487
9,11,19,1.2004e+05,-0.443,0.157
9,11,19,1.2008e+05,-0.042,-0.437
9,11,19,1.2012e+05,0.238,-0.025
9,11,19,1.2016e+05,0.46,0.193
9,11,19,1.202e+05,0.192,0.036
9,11,19,1.2023e+05,-0.093,0.118
9,11,19,1.2027e+05,-0.344,0.148
9,11,19,1.2031e+05,-0.174,0.117
9,11,19,1.2035e+05,-0.029,-0.026
9,11,19,1.2039e+05,0.026,0.469

关于数据处理可以直接使用官方提供的代码:

%% 批量读取IEEE PHM 2012轴承全寿命数据
clc
clear all
close all
%% 文件夹路径
file_path =  'Learning_set/';
%% 全寿命振动信号
csv_acc_path_list = dir(strcat(file_path,'acc*.csv'));
csv_acc_num = length(csv_acc_path_list);%获取文件总数量
if csv_acc_num > 0 %有满足条件的文件
        for j = 1:csv_acc_num %逐一读取文件
            csv_acc_name = csv_acc_path_list(j).name;% 文件名
            csv_acc =  csvread(strcat(file_path,csv_acc_name));
            csv_acc_data(:,:,j)=csv_acc;
            fprintf('%d %d %s\n',csv_acc_num,j,strcat(file_path,csv_acc_name));% 显示正在处理的文件名
        end
end
% 合并矩阵 时间*通道
channel=6;   %信号的通道数
csv_acc_data_change=permute(csv_acc_data,[2 1 3]);
csv_acc_data=reshape(csv_acc_data_change,channel,prod(size(csv_acc_data))/channel)';

%% 全寿命温度信号
csv_temp_path_list = dir(strcat(file_path,'temp*.csv'));%获取该文件夹中所有csv格式的文件
csv_temp_num = length(csv_temp_path_list);%获取文件总数量
delimiter = ',';
formatSpec = '%s%s%s%s%s%s%[^\n\r]';
if csv_temp_num > 0 %有满足条件的文件
        for j = 1:csv_temp_num %逐一读取文件
            csv_temp_name = csv_temp_path_list(j).name;% 文件名
            csv_temp_fileID = fopen(strcat(file_path,csv_temp_name),'r');
            csv_temp = textscan(csv_temp_fileID, formatSpec, 'Delimiter', delimiter);
            for i=1:size(csv_temp{1,1},1)
                csv_temp_data(i,:,j)=str2num(csv_temp{1,1}{i,1})';
            end
            fprintf('%d %d %s\n',csv_temp_num,j,strcat(file_path,csv_temp_name));% 显示正在处理的文件名
            fclose(csv_temp_fileID);
        end
end

% 合并矩阵 时间*通道
channel=5;   %信号的通道数
csv_temp_data_change=permute(csv_temp_data,[2 1 3]);
csv_temp_data=reshape(csv_temp_data_change,channel,prod(size(csv_temp_data))/channel)';

%% 全寿命振动信号和温度信号的时域图
clearvars -except csv_acc_data csv_temp_data
figure;subplot 211;plot(csv_acc_data(:,5));title('水平振动信号');
       subplot 212;plot(csv_acc_data(:,6));title('竖直振动信号');
figure;plot(csv_temp_data(:,5));title('温度信号')

这里我不是很懂数据背景所以就不多解释了,有懂行的可以交流一下。

为了直观分析数据这里对其进行了可视化如下:

完成数据处理之后就可以搭建所需要的模型了,这里出于做实验的目的开发了很多种不同的模型:CNN、CNN-LSTM、CNN-GRU、CNN-LSTM-ATTENTION、CNN-GRU-ATTENTION等,这里以CNN为例简单看下实际的结构:

只使用了两层的卷积来实现特征提取。

效果如下:

loss曲线如下所示:

为了整体方便使用不同系列的模型这里开发了界面将所有模型整合到了一起,如下:

支持训练/测试两种不同的计算模式如下:

支持自定义测试数据占比计算,如下:

支持不同模型自由切换选择,如下:

支持不同可视化选项,如下:

后续有时间话会考虑将一些集成测量加入进来尝试构建更加高效的模型。

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

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

相关文章

什么是蜕变测试?

文章目录1.传统测试2.蜕变测试2.1.蜕变测试的理解2.2.蜕变测试的步骤2.2.1.生成蜕变关系2.2.2.生成蜕变用例2.2.3.执行蜕变用例2.2.4.校验蜕变关系参考文献1.传统测试 在没有蜕变测试的时代,传统软件测试的原理是:给定输入,观察被测软件的输…

你把骑行当什么? 它就是你需要的

1.骑行是一种有活力的运动,尝试一下你一定会喜欢上它的!2.把骑行当作一种娱乐,让自己快乐地体验自然的美!3.骑行可以帮助你改变心态,让你的心情变得更加愉悦!4.让骑行成为你每天的计划,看看骑行…

项目实战典型案例27——单表的更新接口有9个之多

单表的更新接口有9个之多一:背景介绍环境准备引入pom依赖配置数据库连接mybatis配置文件Mybatis的配置类编写通用的更新语句可以覆盖的更新接口暂时无法覆盖的接口测试四:总结五:升华一:背景介绍 本篇博客是对项目开发中出现的单…

如何分析sql性能

1、前言 提到sql性能分析,可能都会想到explain,它在mysql里被称为执行计划,也就是说可以通过该命令看出mysql在通过优化器分析之后如何执行sql。mysql的内置优化器十分强大,它能帮我们把sql再次优化,以最低的成本去执…

记录自己开发一款小程序中所遇到的问题(uniapp+uview)(持续更新)

每次开发小程序中,都会遇到各种各样的问题。但是有的问题已经遇到过了,但是遇到的时候还是要各种的问度娘。 特此出这篇文章,方便自己也是方便大家。 仅供参考 1. u-collapse的样式在h5中正常,但是运行到微信小程序中样式就乱了…

滑动窗口求最大和最小

滑动窗口 要区分最小和最大滑窗,内层while循环的条件和更新结果的地方 核心: 关键的区别在于,最大滑窗是在迭代右移右边界的过程中更新结果,而最小滑窗是在迭代右移左边界的过程中更新结果。 最小滑窗 给定数组 nums&#xff0…

成都待慕电商:抖音极速版商品卡免佣扶持政策规则

新规,抖音极速版推出商品卡免佣扶持政策规则,本次抖音规则如何规定?具体往下看:一、政策简介1.1政策介绍为了更好地满足用户消费需求,丰富商家经营模式,降低商家经营成本,现平台针对商品卡场景推…

【数据结构】模拟实现 堆

堆数据结构是一种数组对象,它可以被看作一颗完全二叉树的结构(数组是完全二叉树),堆是一种静态结构。堆分为最大堆和最小堆。最大堆:每个父结点都大于孩子结点。最小堆:每个父结点都小于孩子结点。堆的优势…

前端脚手架搭建(part 1)

本篇主要介绍如何搭建前端脚手架,一步一步地实现通过搭建的脚手架下载对应的项目模板。通过脚手架的创建,可以快速搭建项目的基础配置和模板,在部门项目开发的规范中尤其总要。初始化项目:创建一个文件夹,命名随便&…

【LeetCode】螺旋矩阵 [M](数组)

54. 螺旋矩阵 - 力扣(LeetCode) 一、题目 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,…

OceanBase 生态产品:时序数据库CeresDB 正式发布 1.0 版本

欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/ CeresDB 是一款拥有计算存储分离架构的分布式时序数据库,其存储层可以基于 OceanBase KV、OSS 等。经过近一年的开源研发工作,CeresDB 1.0 现已正式发布,达到生产…

tcsh常用配置

查看当前的shell类型 在 Linux 的世界中,有着许多 shell 程序。常见的有: Bourne shell (sh) C shell (csh) TC shell (tcsh) Korn shell (ksh) Bourne Again shell (bash) 其中,最常用的就是bash和tcsh,本次文章介绍tcsh的…

HACKTHEBOX——Help

nmap可以看到对外开放了22,80,3000端口可以看到80端口和3000端口都运行着http服务,先从web着手切入TCP/80访问web提示无法连接help.htb,在/etc/hosts中写入IP与域名的映射打开只是一个apache default页面,没什么好看的使用gobuster扫描网站目…

配电室常见6大隐患,你中了几个?

当今社会,电力的重要性不言而喻,在变电站、配电室等一些场景中放置有大量的电气设备。 为保障这些设备正常运行,以免因为这些设备故障导致无法正常进行电力供应,严重影响生产和生活,我们需要运行一套动环监控系统。 配…

【MySQL】约束

文章目录1. 约束2. 非空约束 NOT NULL3. 唯一性约束 UNIQUE4. 主键约束 PRIMARY KEY5. 自增约束 AUTO_INCREMENT6. 外键约束FOREIGN KEY7. 默认值约束 DEFAULT8. 小结1. 约束 为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面…

达人合作加持品牌布局,3.8女神玩转流量策略!

随着迅猛发展的“她经济”,使社区本就作为内容种草的平台,自带“营销基因”。在3.8女神节即将到来之际,如何充分利用平台女性资源优势,借助达人合作等手段,实现迅速引流,来为大家详细解读下。一、小红书节日…

数据的标准化处理

假设各个指标之间的水平相差很大,此时直接使用原始指标进行分析时,数值较大的指标,在评价模型中的绝对作用就会显得较为突出和重要,而数值较小的指标,其作用则可能就会显得微不足道。 因此,为了统一比较的标…

60% 程序员大呼:我要远程办公!

近几年数字化的普及,白领们从挤地铁、打卡、开会、写日报转变成“早上9点视频会议”,企业的办公场所也从写字楼、会议室、工位变成了手机、电脑中的线上会议室,远程办公已经成为一种流行的办公形式。《财富》杂志发现,75%的员工表…

全网火爆,软件测试面试题大全,接口测试题+回答 (18k+的offer)

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 面试测试工程师的时…

UML全解

目录UML结构性图表类图类图中具体类、抽象、接口和包的表示法在UML类图中表示具体类在UML类图中表示抽象类在UML类图中表示接口在UML类图中表示包关系泛化(Generalization)实现(Realization)关联(Association&#xff…