当前位置: 首页 > news >正文

BiGRU-CCT图像化轴承故障诊断【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
如需沟通交流,查看文章底部二维码


(1)格拉姆角场、马尔可夫转移场和递归图的三通道图像编码:

针对一维振动信号维度限制问题,提出将信号同时转换为三种二维图像表示。格拉姆角场通过将缩放后的数据点映射到极坐标系,计算角度余弦和,保留了时间相关性;马尔可夫转移场通过量化数据分为分位数箱,统计状态转移概率,捕捉了动态变化模式;递归图则通过计算每个点与其他点的距离阈值,揭示了信号的递归特性。将三幅图像叠加为三通道RGB图像,输入紧凑型卷积Transformer模型。多视角图像化方法使得故障特征在图像域中更加显著,实验表明在CWRU数据集上分类准确率比单一图像编码提高了3.2%。

(2)双向门控循环单元与紧凑型卷积Transformer并行特征融合:

所提模型采用双分支并行结构。分支一直接以原始一维时序信号为输入,送入双向门控循环单元提取时序依赖特征,该网络能够从前向后和后向前两个方向捕捉上下文信息。分支二以三通道图像为输入,进入紧凑型卷积Transformer:首先通过卷积层提取局部图像特征,然后使用序列化Transformer编码器捕获全局依赖,其中卷积嵌入替代了传统的线性投影,降低了计算量。最后将两个分支的输出特征向量拼接,送入多头自注意力层进行深度融合,再经分类层输出故障类型。该模型不仅参数量比纯视觉Transformer减少约40%,而且在多组变工况测试中达到99.3%的准确率。

(3)参数优化与对比实验分析:

通过网格搜索和贝叶斯优化对模型超参数(卷积核大小、GRU隐藏单元数、学习率、注意力头数)进行系统调优。采用五折交叉验证评估性能,并设计消融实验:分别移除格拉姆角场通道、马尔可夫转移场通道、递归图通道,验证多通道图像的必要性;分别移除双向门控循环单元分支和紧凑型卷积Transformer分支,验证并行结构的好处。实验结果表明,完整模型在凯斯西储大学和东南大学轴承数据集上的平均准确率分别为99.8%和99.2%,较单分支模型提升约1.5%,表明了多模态融合的有效性。

import torch import torch.nn as nn import numpy as np from pyts.image import GramianAngularField, MarkovTransitionField, RecurrencePlot # 三通道图像编码 def to_3channel_image(signal, size=64): # 重采样到统一长度 from scipy.signal import resample signal_resampled = resample(signal, size) # GAF gaf = GramianAngularField(image_size=size, method='summation') img_gaf = gaf.fit_transform(signal_resampled.reshape(1, -1))[0] # MTF mtf = MarkovTransitionField(image_size=size, n_bins=8) img_mtf = mtf.fit_transform(signal_resampled.reshape(1, -1))[0] # RP rp = RecurrencePlot(dimensions=1, epsilon='percentage_point', percentage=10, threshold_type='distance') img_rp = rp.fit_transform(signal_resampled.reshape(1, -1))[0] # 归一化到0-255并堆叠 img_gaf = ((img_gaf - img_gaf.min()) / (img_gaf.max() - img_gaf.min()) * 255).astype(np.uint8) img_mtf = ((img_mtf - img_mtf.min()) / (img_mtf.max() - img_mtf.min()) * 255).astype(np.uint8) img_rp = ((img_rp - img_rp.min()) / (img_rp.max() - img_rp.min()) * 255).astype(np.uint8) img_3ch = np.stack([img_gaf, img_mtf, img_rp], axis=0) # (3, H, W) return torch.tensor(img_3ch, dtype=torch.float32) / 255.0 # 紧凑型卷积Transformer块 class CompactConvTransformer(nn.Module): def __init__(self, image_size=64, patch_size=4, in_channels=3, embed_dim=128, num_heads=8): super().__init__() self.patch_embed = nn.Conv2d(in_channels, embed_dim, kernel_size=patch_size, stride=patch_size) num_patches = (image_size // patch_size) ** 2 self.pos_embed = nn.Parameter(torch.randn(1, num_patches, embed_dim)) encoder_layer = nn.TransformerEncoderLayer(embed_dim, num_heads, batch_first=True) self.transformer = nn.TransformerEncoder(encoder_layer, 4) def forward(self, x): B = x.size(0) x = self.patch_embed(x).flatten(2).transpose(1,2) # (B, num_patches, embed_dim) x = x + self.pos_embed return self.transformer(x).mean(dim=1) # 并行BiGRU + CCT融合模型 class BiGRU_CCT_Fusion(nn.Module): def __init__(self, input_seq_len=1024, input_feat_dim=1, hidden_dim=64, num_classes=10): super().__init__() self.bigru = nn.GRU(input_feat_dim, hidden_dim, batch_first=True, bidirectional=True) self.cct = CompactConvTransformer() self.fusion_attn = nn.MultiheadAttention(embed_dim=hidden_dim*2 + 128, num_heads=8, batch_first=True) self.fc = nn.Linear(hidden_dim*2 + 128, num_classes) def forward(self, x_seq, x_img): # x_seq: (batch, seq_len, 1) out_seq, _ = self.bigru(x_seq) feat_seq = out_seq[:, -1, :] # (batch, hidden*2) feat_img = self.cct(x_img) # (batch, 128) combined = torch.cat([feat_seq, feat_img], dim=1).unsqueeze(1) # (batch,1, D) attn_out, _ = self.fusion_attn(combined, combined, combined) feat_fused = attn_out.squeeze(1) return self.fc(feat_fused) # 参数优化(贝叶斯优化示例) from skopt import BayesSearchCV from sklearn.model_selection import cross_val_score def optimize_hyperparams(X, y): def evaluate(params): # params: {'bigru_hidden': xx, 'cct_embed': xx} # 训练模型评估 return -np.mean(cross_val_score(model, X, y, cv=3, scoring='accuracy')) from skopt import gp_minimize res = gp_minimize(evaluate, [ (32,128), (64,256) ], n_calls=30) return res.x ",


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

http://www.cnnetsun.cn/news/2142500.html

相关文章:

  • 告别电子书阅读的碎片化时代:如何用一款工具统一所有平台的阅读体验
  • 从AUTOSAR工程师视角看TDA4:多核异构芯片的软件架构“噩梦”与实战避坑指南
  • Molecule状态管理实战:从传统MVP到现代Compose Presenter的转变
  • 人血小板裂解液hPL替代FBS的细胞培养解决方案
  • 如何掌握DLSS版本管理:DLSS Swapper完全指南与实战技巧
  • 你越吼,孩子越差劲;你越闭嘴,孩子越优秀
  • 番茄小说下载器:打造你的专属数字图书馆,让阅读体验全面升级
  • 动物步长分析:整合可视化技巧
  • DLSS Swapper终极指南:5分钟告别手动替换,智能管理你的游戏性能管家
  • 如何一键捕获完整网页?这款免费Chrome扩展让你轻松搞定长网页截图
  • 比迪丽AI绘图效果惊艳展示:100+高质量龙珠角色生成实录
  • 城通网盘直连解析工具:告别限速下载的终极指南
  • 如何用Jasminum插件30秒完成中文文献管理:Zotero中文用户的终极解决方案
  • Faster-Whisper-GUI:解决专业级语音转文字难题的图形化方案
  • Cortex-A65架构内存优化与指令融合技术解析
  • 手写一个一致性哈希:从原理到分布式缓存实战
  • 告别手动部署!用Docker Compose一键搞定若依Vue全家桶(Java/MySQL/Redis/Nginx)
  • 从‘手动挡’到‘自动驾驶’:我用Python+树莓派给自家光伏储能系统DIY了一个简易EMS
  • 什么是销售分析?销售分析怎么做?
  • 从零构建零知识证明DApp:Circom电路进阶与Go语言实战
  • 如何3分钟掌握res-downloader:跨平台资源下载的终极指南
  • 加固后APP闪退、卡顿怎么办?性能损耗与兼容性避坑指南
  • Qwen3.5-27B企业落地指南:电商客服/教育答疑/办公提效三大场景应用
  • 马斯克五步法实战:用Notion和飞书搭建你的个人效率系统(附模板)
  • STM32F4用CubeMX+Makefile移植ThreadX踩坑记:解决.S文件编译报错
  • STM32H743+SOEM+英威腾DA200伺服:一个嵌入式EtherCAT主站的完整调试笔记(含代码)
  • real-anime-z快速上手指南:无需代码,通过WebUI生成高质量动漫图
  • DLSS Swapper:一键智能管理游戏DLSS文件,彻底告别手动替换烦恼
  • 飞书Doc与Drive模块深度解析:文档协作与云盘文件管理
  • Altium Designer(AD 20)-常用操作