✅博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(1)增强型辅助分类生成对抗网络设计:
针对旋转机械故障样本稀缺问题,提出EACGAN模型。在标准ACGAN基础上嵌入自校正卷积模块,该卷积在标准卷积之后使用空间注意力自适应调整特征图,增强生成器对故障细微信号的建模能力。损失函数融合了Wasserstein距离、梯度惩罚和谱归一化,将WGAN-GP的稳定性优势引入ACGAN。具体地,判别器的损失包含真伪判断的Wasserstein损失、类别判断的辅助分类损失和梯度惩罚项。在连续小波变换将一维振动信号转为64x64时频图后,EACGAN生成图像与真实图像的FID分数从原始ACGAN的87降至52,说明生成质量大幅提升。<br>
(2)多尺度注意力卷积神经网络诊断模型:
构建MSACNN作为诊断主干,该网络包含三个并行卷积分支,卷积核尺寸分别为3、5和7,每个分支后接高效通道注意力模块ECA。ECA通过一维卷积快速计算通道权重,参数量比SE模块少90%。三个分支的输出沿通道方向拼接后送入全局平均池化和分类层。在CWRU数据集上,使用EACGAN生成的每类100个样本补充训练,MSACNN的故障识别准确率达到96.8%,仅比使用全部真实数据低1.2%。而无数据增强时准确率仅为81%。模型在三种不同的旋转机械数据集(轴承、齿轮、转子)上均表现出良好的泛化性。<br>
(3)改进域对抗神经网络无监督迁移诊断:
对于变工况下无标签目标域的问题,提出MDANN模型,该模型使用多尺度深度可分离残差网络作为特征提取器,替代标准域对抗网络中的普通卷积。每个残差块包含膨胀率为1、2、4的三个并行深度可分离卷积,以提取不同尺度的特征。在域判别器中引入局部最大均值差异损失,对齐源域和目标域的子领域分布(每类故障单独对齐)。在CWRU到XJTU-SY的跨数据集迁移任务中,MDANN达到87.2%的准确率,比基本DANN提高9.5个百分点。对抗训练的训练曲线表明,MDANN收敛更平滑,最大均值差异值最终降至0.08。
import torch import torch.nn as nn import torch.nn.functional as F class SelfCalibratedConv(nn.Module): def __init__(self, in_ch, out_ch, kernel_size=3): super().__init__() self.conv = nn.Conv2d(in_ch, out_ch, kernel_size, padding=kernel_size//2) self.spatial_attn = nn.Sequential( nn.Conv2d(out_ch, 1, kernel_size=1), nn.Sigmoid() ) def forward(self, x): out = self.conv(x) attn = self.spatial_attn(out) return out * attn class EACGAN_Generator(nn.Module): def __init__(self, noise_dim=100, num_classes=10): super().__init__() self.label_emb = nn.Embedding(num_classes, noise_dim) self.fc = nn.Linear(noise_dim*2, 4*4*256) self.conv = nn.Sequential( nn.ConvTranspose2d(256, 128, 4, stride=2, padding=1), nn.BatchNorm2d(128), nn.ReLU(), SelfCalibratedConv(128, 64, 3), nn.Upsample(scale_factor=2), nn.Conv2d(64, 1, 3, padding=1), nn.Tanh() ) def forward(self, noise, labels): label_emb = self.label_emb(labels) z = torch.cat([noise, label_emb], dim=1) z = self.fc(z).view(-1, 256, 4, 4) return self.conv(z) class MultiScaleResidual(nn.Module): def __init__(self, in_ch, out_ch): super().__init__() self.conv1 = nn.Conv2d(in_ch, out_ch, 3, dilation=1, padding=1) self.conv2 = nn.Conv2d(in_ch, out_ch, 3, dilation=2, padding=2) self.conv3 = nn.Conv2d(in_ch, out_ch, 3, dilation=3, padding=3) self.eca = nn.Conv1d(out_ch*3, out_ch*3, kernel_size=3, padding=1) def forward(self, x): feat1 = self.conv1(x); feat2 = self.conv2(x); feat3 = self.conv3(x) concat = torch.cat([feat1, feat2, feat3], dim=1) B, C, H, W = concat.shape attn = self.eca(concat.mean(dim=[2,3]).reshape(B, C, 1)).sigmoid() return concat * attn.reshape(B, C, 1, 1) + x def gradient_penalty(critic, real, fake, device='cuda'): alpha = torch.rand(real.size(0), 1, 1, 1, device=device) interpolates = (alpha * real + (1 - alpha) * fake).requires_grad_(True) d_interpolates = critic(interpolates) gradients = torch.autograd.grad(outputs=d_interpolates, inputs=interpolates, grad_outputs=torch.ones_like(d_interpolates), create_graph=True, retain_graph=True)[0] grad_norm = gradients.view(gradients.size(0), -1).norm(2, dim=1) return ((grad_norm - 1) ** 2).mean() ",如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇