Python环境下一种基于1D-CNN的齿轮故障诊断及TSNE可视化方法 算法运行环境为Python,深度学习模块为tensorflow和keras 具体模块如下 from tensorflow.keras.models import Sequential,Model from tensorflow.keras.layers import Input,Dense, Dropout, Flatten from tensorflow.keras.layers import Conv2D, MaxPooling2D

在机械工程领域,齿轮故障诊断是确保设备稳定运行的关键环节。借助 Python 强大的生态系统,我们可以利用 1D - CNN(一维卷积神经网络)来高效地实现这一任务,并通过 TSNE(t - 分布式随机邻域嵌入)进行数据的可视化分析。本文就带大家了解如何在 Python 环境下基于 1D - CNN 实现齿轮故障诊断以及 TSNE 可视化。

算法运行环境与模块

我们的算法运行在 Python 环境下,深度学习模块选用 tensorflow 和 keras 。这里先看看我们引入的具体模块:

from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Input, Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D

Sequential 是 Keras 中用于构建顺序模型的类,这种模型适用于单输入单输出的简单神经网络结构。Model 则更加灵活,可用于构建复杂的多输入多输出模型。

Input 层用于定义输入张量的形状,它是神经网络的入口。Dense 层是全连接层,每一个神经元都与上一层的所有神经元相连,它是神经网络中最常用的层之一。Dropout 层在训练过程中随机丢弃一些神经元,以防止过拟合。Flatten 层用于将多维数据展平为一维数据,方便后续全连接层的处理。

Python环境下一种基于1D-CNN的齿轮故障诊断及TSNE可视化方法 算法运行环境为Python,深度学习模块为tensorflow和keras 具体模块如下 from tensorflow.keras.models import Sequential,Model from tensorflow.keras.layers import Input,Dense, Dropout, Flatten from tensorflow.keras.layers import Conv2D, MaxPooling2D

Conv2D 是二维卷积层,在图像识别等领域广泛应用,虽然我们这里是 1D - CNN,但 Keras 库中类似的概念便于理解。MaxPooling2D 是二维最大池化层,它通过取局部区域的最大值来降低数据维度,同时保留主要特征。在 1D - CNN 中也会有类似的 1D 池化操作,不过这里先以引入的二维操作相关模块作为铺垫理解。

基于 1D - CNN 的齿轮故障诊断模型构建思路

1D - CNN 对于处理序列数据非常有效,而齿轮故障诊断中采集到的振动信号等数据可以看作是序列数据。

我们先构建输入层,假设我们的输入数据形状为 (numsamples, timesteps, features),其中 numsamples 是样本数量,timesteps 是时间步数(在振动信号里可以理解为采样点数),features 一般为 1(单通道数据)。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense

model = Sequential()
model.add(Conv1D(filters = 32, kernel_size = 3, activation='relu', input_shape=(timesteps, 1)))
model.add(MaxPooling1D(pool_size = 2))
model.add(Conv1D(filters = 64, kernel_size = 3, activation='relu'))
model.add(MaxPooling1D(pool_size = 2))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

在上述代码中,首先通过 Conv1D 添加一维卷积层,filters 设置卷积核的数量为 32 ,kernelsize 表示卷积核的大小为 3 ,激活函数选用 relu 。输入形状设置为 (timesteps, 1) 。接着添加 MaxPooling1D 进行一维最大池化,池化大小为 2 ,这样可以降低数据维度。再次添加卷积层和池化层进一步提取特征。最后通过 Flatten 展平数据,再经过两个全连接层 Dense ,输出层的神经元数量为 numclasses ,对应齿轮故障的类别数量,激活函数使用 softmax 以输出各类别的概率。

TSNE 可视化

完成齿轮故障诊断模型训练后,我们可以用 TSNE 对模型中间层提取的特征进行可视化。

from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import numpy as np

# 假设已经训练好模型并获取中间层特征
intermediate_layer_model = Model(inputs = model.input,
                                 outputs = model.get_layer('layer_name').output)
intermediate_output = intermediate_layer_model.predict(X_test)

tsne = TSNE(n_components = 2)
tsne_results = tsne.fit_transform(intermediate_output)

plt.scatter(tsne_results[:, 0], tsne_results[:, 1], c = y_test)
plt.colorbar()
plt.show()

在这段代码中,首先我们通过 Model 类构建一个新的模型 intermediatelayermodel ,它的输入是原模型的输入,输出是原模型中指定层(这里用 layer_name 表示,实际需替换为具体层名)的输出,这样就能获取到中间层的特征。接着使用 TSNE 对这些特征进行降维处理,将数据降到二维以便可视化。最后通过 matplotlib 库将降维后的数据绘制出来,不同类别的数据点用不同颜色表示,从而直观地观察数据分布情况。

通过以上在 Python 环境下利用 1D - CNN 实现齿轮故障诊断及 TSNE 可视化,我们可以更清晰地了解齿轮的运行状态以及故障模式,为实际工程应用提供有力支持。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐