✅博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(1)铁谱图像与理化参数的联合特征提取:
针对齿轮箱润滑油中磨粒形态和油液理化指标的互补性,提出了一种双流特征融合网络LubeFusionNet。第一流处理铁谱图像:采用改进的ResNet-18,在残差块中嵌入高效通道注意力模块,提取磨粒的形状、尺寸、颜色及浓度特征,输出512维磨粒特征向量。第二流处理理化参数:包括粘度、酸值、水分含量和介电常数四个指标,通过三层全连接网络映射为128维理化特征。然后设计联合注意力融合模块,计算磨粒特征对理化特征的影响权重以及理化特征对磨粒特征的修正权重,实现双向门控融合。在某2MW风电机组齿轮箱上连续采集了18个月的润滑油样本共360组,涵盖正常、轻微磨损、严重磨损、异物侵入四种状态。所提方法的状态识别准确率为94.3%,比单独使用铁谱图像或单独使用理化参数分别高出11.2和15.7个百分点。
(2)时序磨粒浓度预测的自回归Transformer模型:
为了预测未来润滑系统中磨粒浓度的变化趋势,构建了一种基于时序分解的自回归Transformer模型AR-Transformer。该模型首先对磨粒浓度序列(采样间隔为1天,长度为90天)进行季节-趋势分解,采用STL方法分离出趋势分量、季节分量和残差分量。然后将三个分量分别输入到三个共享参数的Transformer编码器中进行位置编码与多头注意力建模。之后通过可学习的聚合权重将三个分量的输出重新组合,再经过一个自回归解码器,以滑动窗口方式逐步预测未来7天的总磨粒浓度。在训练中采用了差异损失函数,同时优化趋势预测误差和季节周期性保持误差。在风场实际数据上,该模型对重度磨损提前预警的平均提前天数为8.5天,误报率为7.2%。
(3)基于图神经网络的齿轮箱健康度评分系统:
考虑到风力发电机组齿轮箱包含多个齿轮副和轴承,各摩擦副的磨粒贡献存在耦合关系,设计了一种异构图神经网络HGN-Lube。节点包含:各个齿轮(高速级、中间级、低速级)、各个轴承、以及油液理化参数节点。边分为三类:传动耦合边(齿轮之间)、磨损影响边(轴承向齿轮传递磨粒)、油液汇聚边(各节点向油液节点贡献磨粒)。采用图注意力层更新节点特征,经过三层传播后,从油液节点读取综合健康状态表征。最后通过一个回归头输出0到100之间的健康评分。在标注了实际维修记录的90组故障案例中,该健康评分系统与人工专家评分的相关系数达到0.93,当评分低于60分时,下一次计划维护前实际发生故障的概率为82%。,"import torch.nn as nn
import torch
import numpy as np
from torchvision.models import resnet18
class EfficientChannelAttention(nn.Module):
def __init__(self, channels, gamma=2):
super().__init__()
t = int(abs(np.log2(channels) + 1) / gamma)
k = t if t % 2 else t + 1
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.conv = nn.Conv1d(1, 1, kernel_size=k, padding=k//2, bias=False)
def forward(self, x):
b,c,_,_ = x.shape
y = self.avg_pool(x).view(b,1,c)
y = self.conv(y).view(b,c,1,1)
return x * torch.sigmoid(y)
class TwinFlowFusion(nn.Module):
def __init__(self, dim_img=512, dim_para=128, fuse_dim=256):
super().__init__()
self.img_fc = nn.Linear(dim_img, fuse_dim)
self.para_fc = nn.Linear(dim_para, fuse_dim)
self.gate_img = nn.Linear(fuse_dim, fuse_dim)
self.gate_para = nn.Linear(fuse_dim, fuse_dim)
def forward(self, img_feat, para_feat):
img_proj = torch.tanh(self.img_fc(img_feat))
para_proj = torch.tanh(self.para_fc(para_feat))
gate_i = torch.sigmoid(self.gate_img(img_proj))
gate_p = torch.sigmoid(self.gate_para(para_proj))
fused = gate_i * img_proj + gate_p * para_proj
return fused
class SeasonalDecompTransformer(nn.Module):
def __init__(self, d_model=64, nhead=4, num_layers=3):
super().__init__()
self.decomp = None
self.encoder_layer = nn.TransformerEncoderLayer(d_model, nhead, batch_first=True)
self.trans_enc = nn.TransformerEncoder(self.encoder_layer, num_layers)
self.decoder = nn.Linear(d_model, 1)
def forward(self, x):
x = x.unsqueeze(-1)
trend = F.avg_pool1d(x, kernel_size=7, stride=1, padding=3)
seasonal = x - trend
residual = seasonal - F.avg_pool1d(seasonal, kernel_size=3, stride=1, padding=1)
comps = torch.cat([trend, seasonal, residual], dim=-1)
comps = comps.permute(0,2,1)
out = self.trans_enc(comps)
pred = self.decoder(out).squeeze(-1)
return pred
class HeteroLubeGNN(nn.Module):
def __init__(self, node_types=['gear','bearing','oil'], in_dim=32, hid_dim=64):
super().__init__()
self.type_embed = nn.Embedding(len(node_types), in_dim)
self.attn = nn.MultiheadAttention(hid_dim, 4, batch_first=True)
def forward(self, x, edge_index, edge_type):
x = self.type_embed(x)
x = self.attn(x, x, x)[0]
return x.mean(dim=1)
如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇