✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1幽灵模块与坐标注意力优化的轻量级CNN针对实际故障诊断中模型参数量大、推理速度慢的问题提出一种基于幽灵模块和坐标注意力的轻量级网络。幽灵模块将标准卷积分为两部分一部分生成少量内在特征图另一部分通过廉价线性变换深度卷积生成更多冗余特征图从而大幅减少参数。同时在幽灵瓶颈结构中引入坐标注意力该注意力不仅考虑通道间关系还捕获空间位置的方向感知信息更适合轴承信号的局部特征。设计自适应加权模块对卷积过程中不同阶段的特征进行动态权重调整加速网络收敛。在CWRU数据集上该方法平均准确率比先进算法高出4%参数量仅为传统CNN的1/5。2GADF变换与条件生成对抗网络的小样本数据增强针对小样本问题提出将一维振动信号通过格拉姆角差场变换转换为二维图像并利用条件生成对抗网络生成新样本。格拉姆角差场通过计算不同时间点之间的角度差将时序相关性编码为图像中的像素关系相比直接使用原始信号保留了更丰富的结构信息。生成对抗网络以故障类别标签为条件生成指定类别的GADF图像并采用WGAN-GP损失和动态坐标注意力以增强生成质量。实验表明该方法在每类仅10个样本的条件下分类准确率仍能达到93%以上。3双向Transformer与正交约束损失设计了一个双向Transformer编码器能够同时考虑过去和未来的上下文信息适合短时振动信号。在特征提取后施加正交约束损失使得不同类别的特征向量尽可能正交类内特征紧凑。该方法在变转速和噪声环境下具有良好鲁棒性准确率可达99%。import torch import torch.nn as nn import torch.nn.functional as F import numpy as np # 幽灵瓶颈模块 class GhostBottleneck(nn.Module): def __init__(self, in_ch, out_ch, stride1): super().__init__() self.conv nn.Conv2d(in_ch, out_ch//2, 1, biasFalse) self.ghost nn.Conv2d(out_ch//2, out_ch//2, 3, padding1, groupsout_ch//2, biasFalse) self.shortcut nn.Conv2d(in_ch, out_ch, 1, stride) if in_ch ! out_ch else nn.Identity() self.ca CoordAttention(out_ch) def forward(self, x): x1 self.conv(x) x2 self.ghost(x1) out torch.cat([x1, x2], dim1) out self.ca(out) return out self.shortcut(x) class CoordAttention(nn.Module): def __init__(self, in_ch): super().__init__() self.pool_h nn.AdaptiveAvgPool2d((None, 1)) self.pool_w nn.AdaptiveAvgPool2d((1, None)) self.conv nn.Conv2d(in_ch, in_ch//32, 1) def forward(self, x): b,c,h,w x.shape x_h self.pool_h(x).permute(0,1,3,2) # (b,c,1,w) - (b,c,w,1) x_w self.pool_w(x) y torch.cat([x_h.squeeze(3), x_w.squeeze(2)], dim2) y self.conv(y.unsqueeze(3)).squeeze(3) # 实际需分离再sigmoid return x # GADF变换 def gadf_transform(signal): # 归一化到[-1,1] sig_norm (signal - signal.min()) / (signal.max() - signal.min()) * 2 - 1 phi np.arcsin(sig_norm) G np.outer(np.sin(phi), np.sin(phi)) np.outer(np.cos(phi), np.cos(phi)) return G # 双向Transformer class BiTransformer(nn.Module): def __init__(self, d_model128, nhead4): super().__init__() self.encoder nn.TransformerEncoder( nn.TransformerEncoderLayer(d_model, nhead, batch_firstTrue), num_layers3 ) self.fc nn.Linear(d_model, 10) def forward(self, x): # x: (B, seq, feat) x self.encoder(x) return self.fc(x.mean(dim1)) # 正交约束损失 def ortho_loss(features, labels): # features: (B, D), labels: (B) class_centers [] for c in torch.unique(labels): class_centers.append(features[labelsc].mean(0)) centers torch.stack(class_centers) # (C, D) # 计算类间正交性惩罚非零点积 ortho torch.matmul(centers, centers.T) diag torch.eye(len(centers), devicecenters.device) loss (ortho * (1-diag)).norm() return loss ,如有问题可以直接沟通