无监督域适应滚动轴承故障诊断【附代码】
✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅成品或者定制扫描文章底部微信二维码。1基于条件域对抗网络的时频图域适应诊断传统深度学习方法要求训练数据和测试数据服从独立同分布但在变工况下这一假设往往不成立。为了对齐源域实验室工况和目标域实际工况的特征分布本文提出基于条件域对抗性网络的无监督诊断模型。首先利用连续小波变换将原始一维振动信号转换为二维时频图。时频图能够同时揭示信号在时间和频率维度上的能量分布相比一维信号蕴含更丰富的故障特征。随后构建一个特征提取器从时频图中提取深度特征并将其输入故障分类器进行类别预测。为了实现域适应引入一个域判别器其任务是根据特征判断样本来自源域还是目标域。然而仅基于特征的对齐容易忽略分类器结构信息。为此我们采用条件域对抗训练策略将分类器的预测输出与特征向量进行联合形成多线性映射再送入域判别器。这种联合分布对齐方式能够更精细地匹配两个域的差异迫使特征提取器学习到既具有故障判别性又具有域不变性的特征。在无标签目标域数据上的实验结果表明该方法能够显著提升跨工况诊断的准确率有效克服了数据分布漂移带来的负面影响。2无源域适应下基于不确定性量化的伪标签优化随着数据隐私保护意识的增强在某些工业场景中源域数据如实验室数据可能由于商业机密或隐私法规而无法直接访问只能获得一个在源域上预训练好的模型。这给传统的域适应方法带来了巨大挑战因为无法再通过联合训练源域和目标域数据来缩小分布差异。针对这一无源域适应问题本文提出基于不确定性量化伪标签优化的诊断网络。该网络首先利用预训练的源模型对目标域无标签样本进行初步预测生成伪标签。然而由于域偏移这些伪标签中包含大量噪声。为了筛选出高质量伪标签我们引入证据理论构建不确定性评估框架。通过将模型输出视为狄利克雷分布的参数可以量化每个预测结果的不确定性。结合信息熵建立动态样本筛选机制优先选择不确定性低、置信度高的样本生成伪标签。为了进一步抑制伪标签中的残余噪声我们采用基于邻域感知的伪标签优化策略即在特征空间中如果一个样本的伪标签与其k个最近邻样本的伪标签不一致则认为该伪标签可能错误并根据邻居的投票进行修正。通过这种迭代筛选与优化模型能够在无源域数据的情况下逐步提升对目标域样本的诊断精度。3无源域场景下基于特征合成与对比学习的开集故障诊断在实际运行过程中轴承可能会出现训练数据中从未见过的新型故障这就要求诊断模型具备开集识别能力即不仅能正确分类已知故障还能有效检测出未知故障。为此本文设计了一种在无源域场景下基于特征合成与对比学习的开集故障诊断方法。该方法首先在目标域特征空间中利用已知类样本的特征进行重组与插值生成模拟未知类的合成样本从而为未知类别的识别提供训练依据。同时引入对比学习策略通过构造正负样本对拉近同一类样本在特征空间中的距离推远不同类样本的距离强化特征的聚类效果使得已知类形成紧凑的簇未知类则远离这些簇。在此基础上训练一个基于距离的开集分类器例如通过设置类别中心并计算样本到中心的最小距离来判断是否为未知类。import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import DataLoader, TensorDataset import numpy as np from scipy.signal import cwt, morlet2 # 1. 连续小波变换时频图生成 def cwt_transform(signal, fs12000, scalesnp.arange(1, 128)): widths fs * scales / (2 * np.pi * 50) # 中心频率50Hz cwtmatr cwt(signal, morlet2, widths) return np.abs(cwtmatr) # 2. 条件域对抗网络 (CDAN) 核心模块 class CDANFeatureExtractor(nn.Module): def __init__(self, input_channels1, feature_dim256): super(CDANFeatureExtractor, self).__init__() self.conv1 nn.Conv2d(input_channels, 32, kernel_size3, padding1) self.bn1 nn.BatchNorm2d(32) self.pool1 nn.MaxPool2d(2) self.conv2 nn.Conv2d(32, 64, kernel_size3, padding1) self.bn2 nn.BatchNorm2d(64) self.pool2 nn.MaxPool2d(2) self.conv3 nn.Conv2d(64, 128, kernel_size3, padding1) self.bn3 nn.BatchNorm2d(128) self.pool3 nn.AdaptiveAvgPool2d((4,4)) self.fc nn.Linear(128*4*4, feature_dim) def forward(self, x): x F.relu(self.bn1(self.conv1(x))) x self.pool1(x) x F.relu(self.bn2(self.conv2(x))) x self.pool2(x) x F.relu(self.bn3(self.conv3(x))) x self.pool3(x) x x.view(x.size(0), -1) x self.fc(x) return x class CDANClassifier(nn.Module): def __init__(self, feature_dim256, num_classes4): super(CDANClassifier, self).__init__() self.fc nn.Linear(feature_dim, num_classes) def forward(self, x): return self.fc(x) class DomainDiscriminator(nn.Module): def __init__(self, input_dim, hidden_dim512): super(DomainDiscriminator, self).__init__() self.fc1 nn.Linear(input_dim, hidden_dim) self.fc2 nn.Linear(hidden_dim, hidden_dim) self.fc3 nn.Linear(hidden_dim, 1) def forward(self, x): x F.relu(self.fc1(x)) x F.relu(self.fc2(x)) return torch.sigmoid(self.fc3(x)) class CDAN(nn.Module): def __init__(self, feature_extractor, classifier, domain_discriminator): super(CDAN, self).__init__() self.feature_extractor feature_extractor self.classifier classifier self.domain_discriminator domain_discriminator def forward(self, x, alpha1.0): features self.feature_extractor(x) logits self.classifier(features) softmax_out F.softmax(logits, dim1) # 多线性映射: outer product of features and softmax_out op_out torch.bmm(softmax_out.unsqueeze(2), features.unsqueeze(1)) op_out op_out.view(x.size(0), -1) # 域判别 domain_out self.domain_discriminator(op_out) return logits, domain_out # 3. 证据深度学习与不确定性量化 class EvidenceClassifier(nn.Module): def __init__(self, feature_dim256, num_classes4): super(EvidenceClassifier, self).__init__() self.fc nn.Linear(feature_dim, num_classes) def forward(self, x): # 输出证据非负 evidence F.softplus(self.fc(x)) return evidence def edl_loss(evidence, target, epoch_num, annealing_factor): # 证据深度学习损失函数 alpha evidence 1 S torch.sum(alpha, dim1, keepdimTrue) prob alpha / S # 对目标类别求负对数似然 target_onehot F.one_hot(target, num_classesevidence.size(1)) loss torch.sum(target_onehot * (torch.log(S) - torch.log(alpha)), dim1) # KL散度惩罚项 alpha_tilde target_onehot (1 - target_onehot) * alpha S_tilde torch.sum(alpha_tilde, dim1, keepdimTrue) kl torch.sum( (alpha_tilde - 1) * (torch.digamma(alpha_tilde) - torch.digamma(S_tilde)), dim1, keepdimTrue ) annealing_coef min(1.0, epoch_num / annealing_factor) loss loss annealing_coef * kl.squeeze() return torch.mean(loss) # 4. 无源域适应中的伪标签优化示例 def pseudo_label_refinement(features, pseudo_labels, k5): 基于邻域感知的伪标签优化 from sklearn.neighbors import NearestNeighbors nbrs NearestNeighbors(n_neighborsk, metriccosine).fit(features) indices nbrs.kneighbors(features, return_distanceFalse) refined_labels [] for i, neighbors in enumerate(indices): neighbor_labels pseudo_labels[neighbors] # 投票 unique, counts np.unique(neighbor_labels, return_countsTrue) refined_label unique[np.argmax(counts)] refined_labels.append(refined_label) return np.array(refined_labels) # 5. 对比学习模块用于开集诊断 class ContrastiveProjection(nn.Module): def __init__(self, input_dim256, proj_dim128): super(ContrastiveProjection, self).__init__() self.fc nn.Sequential( nn.Linear(input_dim, proj_dim), nn.ReLU(), nn.Linear(proj_dim, proj_dim) ) def forward(self, x): return F.normalize(self.fc(x), dim1) def contrastive_loss(z_i, z_j, temperature0.5): # SimCLR 对比损失 batch_size z_i.size(0) z torch.cat([z_i, z_j], dim0) sim torch.mm(z, z.T) / temperature sim_i_j torch.diag(sim, batch_size) sim_j_i torch.diag(sim, -batch_size) positive torch.cat([sim_i_j, sim_j_i], dim0) mask torch.ones((2*batch_size, 2*batch_size), dtypebool) mask mask.fill_diagonal_(False) negative sim[mask].view(2*batch_size, -1) loss -torch.log(positive.exp() / (positive.exp() negative.exp().sum(dim1))).mean() return loss # 6. 训练循环示例 if __name__ __main__: # 假设源域和目标域数据已经加载 # 构建CDAN模型 feature_extractor CDANFeatureExtractor() classifier CDANClassifier() domain_disc DomainDiscriminator(input_dim256*4) # 多线性映射维度: num_classes * feature_dim model CDAN(feature_extractor, classifier, domain_disc) # 优化器 optim torch.optim.Adam(model.parameters(), lr0.001) # 模拟数据 src_imgs torch.randn(32, 1, 64, 64) src_labels torch.randint(0, 4, (32,)) tgt_imgs torch.randn(32, 1, 64, 64) for epoch in range(10): # 前向 src_logits, src_domain_out model(src_imgs) tgt_logits, tgt_domain_out model(tgt_imgs) # 分类损失 cls_loss F.cross_entropy(src_logits, src_labels) # 域判别损失 domain_labels_src torch.ones(src_imgs.size(0), 1) domain_labels_tgt torch.zeros(tgt_imgs.size(0), 1) domain_loss F.binary_cross_entropy(src_domain_out, domain_labels_src) \ F.binary_cross_entropy(tgt_domain_out, domain_labels_tgt) total_loss cls_loss 0.5 * domain_loss optim.zero_grad() total_loss.backward() optim.step() print(fEpoch {epoch}: Loss {total_loss.item():.4f})如有问题可以直接沟通

相关新闻

宽度学习旋转机械智能故障诊断【附代码】

宽度学习旋转机械智能故障诊断【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅成品或者定制,扫描文章底部微信二维码。(1)因果多尺度特征与宽度学习的增强表示能力 传统的宽度学习网…

2026/5/17 6:39:58 阅读更多 →
分层图网络建模风电机组故障诊断【附代码】

分层图网络建模风电机组故障诊断【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅成品或者定制,扫描文章底部微信二维码。(1)基于先验知识的分层图构建 风电机组各子系统(如…

2026/5/17 6:39:58 阅读更多 →
QPACK、单向流、帧解析:逐行拆解Nginx HTTP/3的13个源文件,看HTTP/3请求到底怎么跑起来的

QPACK、单向流、帧解析:逐行拆解Nginx HTTP/3的13个源文件,看HTTP/3请求到底怎么跑起来的

一、HTTP/3不是"HTTP/2 over QUIC" 很多人第一次听到HTTP/3,本能反应就是:把HTTP/2的帧丢到QUIC上跑呗,能有多大区别? 区别大了去了。HTTP/2的头部压缩算法HPACK依赖TCP的有序交付——编码端往动态表里插一条记录,解码端按同样的顺序更新自己的表副本,两边始…

2026/5/17 5:11:46 阅读更多 →

最新新闻

【大白话说Java面试题 第153题】【06_Spring篇】第13题:Spring 中 Bean 是线程安全的吗?

【大白话说Java面试题 第153题】【06_Spring篇】第13题:Spring 中 Bean 是线程安全的吗?

📌 PDF:大白话说Java面试题 — 06_Spring篇 第13题:Spring 中 Bean 是线程安全的吗? 📚 回答: 核心考点: Spring Bean 的线程安全性是并发编程与 Spring 框架交叉的经典问题,大厂面…

2026/7/5 1:50:25 阅读更多 →
Java计算机毕设之美容会员储值充值积分管理系统的设计与实现 美业技师业绩提成统计管理系统(完整前后端代码+说明文档+LW,调试定制等)

Java计算机毕设之美容会员储值充值积分管理系统的设计与实现 美业技师业绩提成统计管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/5 1:48:25 阅读更多 →
电容式触摸按键 PCB 设计 10 要点:从 PAD 形状到走线间距的实战避坑

电容式触摸按键 PCB 设计 10 要点:从 PAD 形状到走线间距的实战避坑

电容式触摸按键PCB设计10大核心要点:从焊盘优化到抗干扰布局实战指南在智能家电和消费电子领域,电容式触摸按键正在快速取代传统机械按键。根据行业调研数据,2022年全球电容式触摸控制器市场规模已达12.7亿美元,年复合增长率保持在…

2026/7/5 1:46:23 阅读更多 →
校友质量高的国内EMBA 2026综合实力权威榜单

校友质量高的国内EMBA 2026综合实力权威榜单

一、榜单评测引言随着国内企业全球化布局、数字化转型进程加速,越来越多企业创始人、高层管理者摒弃传统单一管理进修模式,优先选择校友圈层优质、国际化资源充足、学历认可度高的中英双语EMBA项目。优质校友圈层不仅是职场进阶、企业发展的核心人脉资源…

2026/7/5 1:44:23 阅读更多 →
面试官问:“模型一本正经胡说时,logprobs 抓得到吗?“

面试官问:“模型一本正经胡说时,logprobs 抓得到吗?“

面试官问:“模型一本正经胡说时,logprobs 抓得到吗?” “3 年 LLM 应用开发,主导过企业 RAG 知识库和多个 Agent 项目,熟悉主流大模型 API 与推理优化。” 简历挺漂亮。我没问框架,先问了个最朴素的问题&am…

2026/7/5 1:44:23 阅读更多 →
Codex 完整使用教程(Windows/macOS 双系统区别详解)

Codex 完整使用教程(Windows/macOS 双系统区别详解)

一、Codex 基础介绍OpenAI Codex 是专为代码生成、调试、重构、自动化系统操作打造的AI模型,也是OpenAI面向开发者的核心编程智能体,支持自然语言转代码、批量代码处理、本地文件操作、终端指令自动化等功能,适配 Windows、macOS 双平台&…

2026/7/5 1:42:22 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻