轴承齿轮时序数据迁移故障诊断【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1概率稀疏自注意力与局部最大均值差异联合对齐针对变工况下轴承齿轮振动信号的时序分布偏移问题提出ProSparse-MMD迁移网络。在源域特征提取中设计概率稀疏自注意力机制每个Query只与Top-K个最重要的Key计算点积K通过伯努利采样可学习确定计算复杂度从O(L^2)降至O(L log L)。提取的特征输入到域对齐模块同时计算全局MMD和局部子领域MMD。引入类感知对齐损失为每一类故障单独计算条件分布差异并加权求和权重由源域该类样本的比例决定。在CWRU 0hp到3hp的跨负载迁移中平均诊断准确率94.8%比单一全局MMD高6.2%。对于滚动体故障这种分布差异最大的类别局部MMD将其对齐损失降低了58%。该方法在仅有20%目标域伪标签参与对齐的情况下仍达到91%准确率。,2时序数据增强与对抗域混淆的渐进式迁移为了进一步提升模型在目标域数据极度稀缺时的适应性设计了一种渐进式迁移学习方案。第一阶段使用源域数据预训练模型第二阶段在目标域无标签数据上采用对抗域混淆训练特征提取器与域判别器博弈以学习域不变特征。在对抗训练过程中引入时序一致性正则化要求原始序列与经过时间扭曲后的增强序列具有相同的域判别结果。第三阶段使用少量目标域有标签数据微调分类器。在从齿轮箱到轴承的跨设备迁移任务中目标域仅有30个有标签样本时渐进式对抗迁移达到85.6%准确率比直接微调高出14.3%。使用了六种时序增强技术伸缩、扭曲、加噪、切片、反转、掩码每种增强在训练时随机应用。消融实验显示时间扭曲增强贡献最大单独使用时提升5.8%。,3跨设备时序特征归一化与自适应批归一化针对不同设备采集的振动信号幅值和采样频率差异导致特征分布漂移提出跨域时序特征归一化层CTFN。该层在通道维度上对每个时间步进行实例归一化然后使用可学习的仿射参数进行变换与域标识相关联。针对不同域保存不同的gamma和beta参数在推理时根据输入数据的域类型选择对应的参数。在源域到目标域的跨设备迁移中CTFN层使得深度特征的协方差差异缩小了54%。同时设计域自适应批归一化在训练过程中统计每个域的均值和方差并采用指数移动平均合并为全局统计量用于测试。在从实验台到真实工业现场的迁移中原始振动信号采样率从12kHz变为25.6kHzCTFN层自动调节归一化尺度使模型性能仅下降3.2%而无归一化机制时下降19%。最终将模型部署到手机端边缘设备通过ONNX量化后模型大小1.6MB推理延迟4ms实现了随身携带的轴承故障诊断工具。import torch import torch.nn as nn import math class ProbSparseAttention(nn.Module): def __init__(self, d_model, n_heads): super().__init__() self.d_model d_model self.n_heads n_heads self.q_lin nn.Linear(d_model, d_model) self.k_lin nn.Linear(d_model, d_model) self.v_lin nn.Linear(d_model, d_model) self.dropout nn.Dropout(0.1) def forward(self, x): B, L, D x.shape Q self.q_lin(x).view(B, L, self.n_heads, -1).transpose(1,2) K self.k_lin(x).view(B, L, self.n_heads, -1).transpose(1,2) V self.v_lin(x).view(B, L, self.n_heads, -1).transpose(1,2) # 采样Top-K with torch.no_grad(): M torch.softmax(Q K.transpose(-2,-1) / math.sqrt(D//self.n_heads), dim-1) topk torch.topk(M, kmin(32, L), dim-1).indices # 稀疏注意力 attn torch.zeros(B, self.n_heads, L, L, devicex.device) for i in range(L): attn[:,:,i,topk[:,:,i,:]] 1 attn attn / attn.sum(dim-1, keepdimTrue) out torch.matmul(attn, V).transpose(1,2).reshape(B, L, D) return self.dropout(out) class CTFN(nn.Module): def __init__(self, num_features, num_domains): super().__init__() self.num_features num_features self.gamma nn.ParameterDict({fd{i}: nn.Parameter(torch.ones(num_features)) for i in range(num_domains)}) self.beta nn.ParameterDict({fd{i}: nn.Parameter(torch.zeros(num_features)) for i in range(num_domains)}) def forward(self, x, domain_id): # x shape: (B, T, F) mean x.mean(dim1, keepdimTrue) std x.std(dim1, keepdimTrue) 1e-5 x_norm (x - mean) / std gamma self.gamma[fd{domain_id}] beta self.beta[fd{domain_id}] return x_norm * gamma beta class ProgressiveTransferNet(nn.Module): def __init__(self, input_dim, hidden64): super().__init__() self.attention ProbSparseAttention(hidden, 4) self.fc nn.Linear(input_dim, hidden) def forward(self, x_src, x_tgt, domain_id_src, domain_id_tgt): f_src self.fc(x_src) f_tgt self.fc(x_tgt) f_src self.attention(f_src) f_tgt self.attention(f_tgt) f_src CTFN(64, 2)(f_src, domain_id_src) f_tgt CTFN(64, 2)(f_tgt, domain_id_tgt) return f_src, f_tgt如有问题可以直接沟通