2026/1/16 8:31:30
网站建设
项目流程
烟台装修行业网站建设方案,gta5网站显示建设中,网站建设的设计思路,wordpress完整模板下载基于注意力模块及1D-CNN的滚动轴承故障诊断故障诊断代码 复现针对传统的卷积神经网络对特征的辨识性差的问题#xff0c;提出一种将注意力模块与一维卷积神经网络相结合的滚动轴承故障诊断模型
首先以加入噪声的振动信号作为输入#xff0c;利用“卷积池化”单元提取信号的多…基于注意力模块及1D-CNN的滚动轴承故障诊断 故障诊断代码 复现 针对传统的卷积神经网络对特征的辨识性差的问题提出一种将注意力模块与一维卷积神经网络相结合的滚动轴承故障诊断模型 首先以加入噪声的振动信号作为输入利用“卷积池化”单元提取信号的多维特征然后通过注意力模块对特征赋予不同的权重利用双池化层取代传统卷积神经网络中的全连接层进行特征的再次提取及特征信息整合最后通过 Softmax层完成轴承状态分类 ●参考文献2022年太阳能学报EI《基于注意力模块及1D-CNN的滚动轴承故障诊断》 ●数据预处理1维数据 ●网络模型AM-CNN ●数据集西储大学CWRU的10分类任务 ●准确率100% ●网络框架pytorch ●结果输出损失曲线图、准确率曲线图、混淆矩阵、tsne图 ●使用对象初学者嘿各位初学者小伙伴们今天咱们来聊聊基于注意力模块及1D - CNN的滚动轴承故障诊断还会带着大家一步步复现代码哦。在传统的卷积神经网络里对特征的辨识性是个让人头疼的问题。就好比你在一堆杂物里找东西眼神不太好老是找不准关键的东西。所以呢咱们今天要讲的这个模型把注意力模块和一维卷积神经网络结合起来就像是给模型装上了“火眼金睛”让它能更准确地识别滚动轴承故障特征。一、数据集咱们用的是西储大学CWRU的10分类任务数据集这可是故障诊断领域里常用的数据集。就像是数学课本后面的经典例题大家都爱用它来练手和验证方法。二、数据预处理数据预处理这儿处理的是1维数据。为啥是1维呢简单来说滚动轴承的振动信号采集下来很多时候就是以1维数据的形式存在的咱们得对这些数据进行清理、归一化之类的操作就像给数据洗个澡、梳个头让它整整齐齐地进入模型。三、网络模型AM - CNN1. 模型架构咱们的模型AM - CNN首先是以加入噪声的振动信号作为输入。为啥要加噪声呢现实世界里的信号可没那么干净加噪声就是为了模拟真实的复杂环境。然后利用“卷积 池化”单元提取信号的多维特征。在PyTorch里卷积层可以这么定义import torch.nn as nn class AM_CNN(nn.Module): def __init__(self): super(AM_CNN, self).__init__() self.conv1 nn.Conv1d(in_channels 1, out_channels 32, kernel_size 5, padding 2) # in_channels 是输入数据的通道数因为是1维数据所以通道数为1 # out_channels 是卷积后输出的通道数这里设为32 # kernel_size 是卷积核的大小5表示5个连续的数据点作为一个卷积核 # padding 2 是为了保持输入输出数据长度一致这段代码定义了一个一维卷积层卷积核大小为5输出通道数为32。就像是用一个特定大小的“滤网”在1维的数据上“过滤”把有用的特征给“捞”出来。接下来是池化层池化层可以这么写self.pool1 nn.MaxPool1d(kernel_size 2, stride 2) # kernel_size 是池化窗口大小这里是2 # stride 是步长也是2这样能对数据进行下采样减少数据量同时保留主要特征池化层就像是把数据“浓缩”把不重要的信息去掉只留下关键的部分减少数据量的同时还能保留主要特征就像从一篇长文章里提取出关键段落。2. 注意力模块特征提取出来后通过注意力模块对特征赋予不同的权重。注意力模块就像是给每个特征标上不同的“重要程度”标签让模型更关注那些重要的特征。这里简单模拟一下注意力模块的部分原理代码实际可能更复杂import torch import torch.nn.functional as F def attention_module(feature_map): avg_pool F.avg_pool1d(feature_map, feature_map.size(2)) # 全局平均池化把特征图在空间维度上压缩成1维向量 fc nn.Sequential( nn.Linear(feature_map.size(1), feature_map.size(1) // 16, bias False), nn.ReLU(inplace True), nn.Linear(feature_map.size(1) // 16, feature_map.size(1), bias False), nn.Sigmoid() ) y avg_pool.view(avg_pool.size(0), -1) y fc(y) y y.view(y.size(0), y.size(1), 1) return feature_map * y.expand_as(feature_map)这段代码先通过全局平均池化把特征图在空间维度上压缩然后通过全连接层、ReLU激活函数和Sigmoid激活函数得到权重系数最后把权重系数和原来的特征图相乘实现对特征赋予不同权重。3. 双池化层与分类接着利用双池化层取代传统卷积神经网络中的全连接层进行特征的再次提取及特征信息整合。全连接层参数太多容易过拟合双池化层就没这毛病。最后通过Softmax层完成轴承状态分类。Softmax层在PyTorch里很简单self.fc nn.Linear(32, 10) # 这里32是前面卷积和池化处理后的特征维度10是因为有10分类任务 def forward(self, x): x self.pool1(F.relu(self.conv1(x))) x attention_module(x) x self.pool1(x) x x.view(-1, 32) x self.fc(x) return F.log_softmax(x, dim 1)在forward函数里数据依次经过卷积、池化、注意力模块、再次池化最后通过全连接层和Softmax函数输出分类结果。四、网络框架PyTorch为啥用PyTorch呢它简单易懂动态图机制让调试和开发都很方便对咱们初学者特别友好。就像骑自行车PyTorch这自行车好上手能让你在深度学习的道路上快速起步。五、训练与结果输出训练过程就不详细贴代码啦主要思路就是定义损失函数、优化器然后不断迭代训练。咱们最终的结果输出有损失曲线图、准确率曲线图、混淆矩阵、tsne图。这些图就像是模型的“体检报告”损失曲线图能看出模型训练过程中损失的变化准确率曲线图能看到模型准确率怎么一步步提升混淆矩阵可以直观地看出模型在各个类别上的分类情况tsne图则能对数据的分布有个可视化的了解。按照这个思路大家就能复现基于注意力模块及1D - CNN的滚动轴承故障诊断代码啦祝大家都能顺利完成在故障诊断的学习道路上越走越远