故障诊断迁移学习项目DDC(保姆教程)

本项目从零开始搭建深度领域混淆(Deep Domain Confusion,DDC)算法。项目包括加载CWRU轴承原始信号,信号处理、数据集制作,模型搭建,DDC域混淆算法设计、特征可视化,混淆矩阵等流程来帮助读者学习基于迁移学习的故障诊断。学懂本项目即可了解故障诊断之迁移学习的基本流程。本项目中[*所有程序代码包含详细的注释*],适合新生小白学习。

1.数据集介绍

1.1试验台介绍

CWRU凯斯西储大学数据集包括四种轴承不同轴承健康状态,即正常状态、内圈故障、外圈故障和滚动体故障。分别有7mils、14mils和21mils三种故障直径(1mils=0.0254mm)。该电动机在0hp、1hp、2hp、3hp四种不同的负载和1730r/min、1750r/min、1772r/min、1797r/min四种不同转速下收集振动信号。

图1. CWRU试验台

1.2采集信号样本介绍

(1)正常数据样本

Motor Load (HP)

Approx. Motor Speed (rpm)

Normal Baseline Data

0

1797

97.mat

1

1772

98.mat

2

1750

99.mat

3

1730

100.mat

(2)故障数据样本

故障直径

电机负载 (HP)

电机

转速 (rpm)

内圈

故障

滚珠故障

外圈故障

Centered
@6:00

Orthogonal
@3:00

Opposite
@12:00

0.007"

0

1797

105.mat

118.mat

130.mat

144.mat

156.mat

1

1772

106.mat

119.mat

131.mat

145.mat

158.mat

2

1750

107.mat

120.mat

132.mat

146.mat

159.mat

3

1730

108.mat

121.mat

133.mat

147.mat

160.mat

0.014"

0

1797

169.mat

185.mat

197.mat

*

*

1

1772

170.mat

186.mat

198.mat

*

*

2

1750

171.mat

187.mat

199.mat

*

*

3

1730

172.mat

188.mat

200.mat

*

*

0.021"

0

1797

209.mat

222.mat

234.mat

246.mat

258.mat

1

1772

210.mat

223.mat

235.mat

247.mat

259.mat

2

1750

211.mat

224.mat

236.mat

248.mat

260.mat

3

1730

212.mat

225.mat

237.mat

249.mat

261.mat

2.数据预处理

数据预处理部分主要是将原始信号划分为训练集和测试集,以用于训练模型。该部分包括:

  •  加载原始信号,从.mat原始数据中加载信号数据;
  • 信号分割,即将原始信号分割为多个样本;
  • 信号变换,将时域信号转换为频域信号;
  • 信号归一化,将信号进行归一化处理;
  • 信号重塑,将信号转换为[batch, channel, height, weight]的数据,以便于输入卷积模型;
  • 数据集生成,将每个类别的样本和标签进行拼接,组成一个完成的训练集。 

 图2. 信号预处理过程

2.1加载原始信号

从mat文件中加载原始的信号,如下图所示。

图3. 原始信号

2.2信号分割

从原始信号中随机采样n个样本长度为1024的样本,如下图所示。

图4. 截取的单个样本信号

2.3对原始信号进行FFT变换

图5. 时域信号变换为频域信号

2.4信号重塑

将长度为[1024]的一维频域信号重塑为[32, 32]的二维信号,如下图所示。

图6. 二维信号

 3.模型介绍

3.1模型结构介绍

本项目使用的轻量化模型主要由标准卷积(Conv1和Conv2)、轻量化特征提取块(Block1和Block2)和分组卷积GC组成,如图6所示,在网络最后一层施加MMD策略。

图7. 诊断模型结构

3.2模型结构参数介绍

具体的模型结构如表1所示,如果不理解可以查看ShuffleNet参考文献。

表1. 诊断模型详细结构参数

4.程序介绍

本项目包含的所有程序文件如下:

图8. DDC项目包含的所有文件

5.混淆矩阵

本项目根据模型保存的预测标签与真实标签来画混淆矩阵,DDC算法在0hp至0hp、0hp至1hp、0hp至2hp、0hp至3hp四个迁移任务中混淆矩阵如下,可以看出DDC在四个迁移任务中均取得了100%准确的分类结果。

图9. DDC在四个迁移任务中模型输出预测标签与真实标签混淆矩阵

6.特征可视化

本项目根据通过加载训练时保存的模型并抽取某一层特征,然后利用t-SNE算法对特征进行可视化,DDC算法在0hp至0hp、0hp至1hp、0hp至2hp、0hp至3hp四个迁移任务中特征可视化效果如下,可以看出DDC在四个迁移任务中均取得了良好的聚类效果。

7.项目包含的程序文件

1. CWRU原始信号数据;

2. 数据预处理程序文件:该文件包含加载原始信号、样本采样、信号变换、信号归一化、样本打标签、生成训练集和测试集。

3. 自己搭建的诊断模型;

4.DDC域混淆算法程序文件,CWRU变工况诊断准确率可达100%

5. 模型训练与测试程序文件,该文件的功能包括:

  (1)保存最佳诊断模型;

  (2)保存最佳模型预测的分类标签;

  (3)保存模型的训练过程,包括训练集的损失和准确率、测试集的损失和准确率,以及总的训练损失。

  (4)项目使用深度域混淆算法DDC来优化模型。

6. 绘制混淆矩阵的程序文件,该文件可以读取保存的预测标签并绘制混淆矩阵;

7. 模型测试与特征抽取的程序文件,该文件可以:

   (1)加载4保存好的模型并进行测试模型的效果;

   (2)抽取模型提取的某一层特征,以便于特征可视化;

8. 特征可视化程序文件,该文件可以加载6抽取好的特征进行t-SNE可视化。

### 迁移学习故障诊断中的应用及实现方法 迁移学习是一种通过利用源域的知识来提升目标域性能的学习技术。它特别适用于当目标域缺乏充足标注数据的情况,这正是许多工业场景中常见的挑战之一[^2]。 #### 1. 故障诊断中的迁移学习背景 在工业领域,尤其是轴承和其他旋转机械设备的故障诊断中,通常需要大量的标注数据来训练有效的机器学习模型。然而,在实际工程环境中获取这些数据既昂贵又耗时。为了克服这一问题,迁移学习提供了一种解决方案——即通过从其他相关设备或实验环境中学到的知识迁移到当前的目标设备上,从而减少对新数据的需求。 #### 2. 基于特征的迁移学习方法 一种广泛应用于轴承故障诊断的技术是基于特征的迁移学习方法。这种方法的核心思想是从源域提取有用的特征表示,并将其适配至目标域的任务需求之中。例如,可以先在一个具有充分标注数据的实验室环境下训练一个通用的特征提取器,再将此特征提取器调整后用于现场采集的小规模数据集之上[^1]。 #### 3. 使用深度学习框架下的迁移学习实例 近年来,随着深度学习的发展,卷积神经网络 (CNNs) 和其变体被成功引入到了迁移学习当中。具体来说,有研究者尝试把一维时间序列形式的振动信号转化为二维图像(如尺度图或者时频谱图),这样就可以充分利用已经预先训练好的 CNN 架构来进行后续分析工作了[^3]。这种做法不仅简化了手工设计特征的过程,而且还能提高最终分类效果。 另外值得注意的是,尽管现代大型神经网络往往依赖海量数据才能达到最佳表现,但对于某些特定应用场景比如小样本情况,则仍然存在一些专门针对此类条件优化过的轻量化版本可供选择;同时适当加入批量归一化(BN)层等操作也有助于改善因不同分布间差异带来的负面影响[^4]。 #### 4. 实现流程概述 以下是采用上述提到的方式完成一次典型项目的大致步骤描述: - **数据准备阶段**: 将原始的一维传感器读数映射成适合输入给定视觉类DNN结构的形式; - **基础模型构建与初始化**: 利用公开可用资源加载预训练权重作为初始参数值设定依据; - **微调过程控制策略制定**: 针对待解决问题特点合理设置哪些部分允许更新以及相应速率大小等因素影响程度评估机制建立起来; - **测试验证环节安排规划**: 设计科学合理的评价指标体系用来衡量改进后的整体效能水平高低状况如何等等事项都需要提前考虑周全才行哦! --- ### 示例代码展示 下面给出一段简单的Python脚本演示如何加载ImageNet上的ResNet50模型并对自定义图片执行预测任务的部分逻辑片段供参考之用: ```python import tensorflow as tf from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions from tensorflow.keras.preprocessing import image import numpy as np def load_and_preprocess_image(img_path): img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) return x model = ResNet50(weights='imagenet') img_path = 'path/to/your/image.jpg' preprocessed_image = load_and_preprocess_image(img_path) preds = model.predict(preprocessed_image) print('Predicted:', decode_predictions(preds, top=3)[0]) ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QQ__1764619824

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值