博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。


(1)温度测点优化与热误差建模的深度网络:

主轴热变形由多个发热源(前后轴承、电机、切削热)引起,温度测点存在冗余。提出了一种基于互信息与注意力机制的温度测点选择方法,从16个初始温度传感器中选出与主轴热伸长最相关的5个测点。然后将选出的温度序列与主轴转速、负载电流组成多变量输入,送入由因果卷积网络和门控循环单元构成的混合模型TCN-GRU。TCN层捕获温度变化的长期趋势,GRU层学习瞬态热响应。模型直接输出主轴端部热变形位移(X,Y,Z三个方向)。在立式加工中心VMC850上,每10秒采集一次数据共收集了120小时运行数据,该模型预测热变形的平均绝对误差为1.2微米,而传统线性回归模型误差为3.8微米。

(2)基于残差注意力网络的主轴轴承退化状态识别:

主轴轴承故障是导致热异常和精度丧失的主要原因。从主轴振动信号和温度信号联合提取特征,构造一种残差注意力网络RAN-Bearing。首先将原始振动信号经过希尔伯特包络解调,得到包络谱,从中提取轴承特征频率(内圈、外圈、滚动体)处的幅值作为特征。然后将这些特征与温度特征拼接,输入到带有三层通道注意力模块的残差网络中。注意力模块自动加权重要特征通道,抑制无关噪声。在主轴轴承加速寿命试验中,提前20小时识别出轴承早期异常(微点蚀),准确率94.7%,召回率91.2%。

(3)跨工况热误差预测的元学习框架:

不同数控机床的热特性差异大,新机床热误差数据少。设计了一个模型无关元学习算法MAML-Thermal。首先在多个源机床(共5台,每台有数天运行数据)上进行元训练,目标是学习一个初始化参数θ,使得在新机床仅用少量数据(如20分钟)进行几步梯度更新后就能快速适应新工况。内循环梯度更新使用支持集(少量新机床数据)更新模型参数,外循环在查询集上计算损失。实验在一台新安装的机床上仅用30个样本(约5分钟数据)微调后,热误差预测误差达到2.5微米,而从头训练需要2000个样本才能达到类似效果。,"import torch

import torch.nn as nn

import torch.nn.functional as F

import numpy as np

from sklearn.feature_selection import mutual_info_regression

def select_temp_sensors(temp_data, thermal_disp, n_select=5):

# temp_data: (N, 16) N个样本

mi = []

for i in range(temp_data.shape[1]):

mi_i = mutual_info_regression(temp_data[:, i:i+1], thermal_disp)

mi.append(mi_i[0])

selected = np.argsort(mi)[-n_select:]

return selected

class CausalConv1d(nn.Module):

def __init__(self, in_ch, out_ch, kernel, dilation=1):

super().__init__()

self.padding = (kernel-1)*dilation

self.conv = nn.Conv1d(in_ch, out_ch, kernel, dilation=dilation, padding=self.padding)

def forward(self, x):

out = self.conv(x)

if self.padding > 0:

out = out[:, :, :-self.padding] # 保持因果性

return out

class TCN_GRU(nn.Module):

def __init__(self, in_dim=7, hid_dim=64, out_dim=3):

super().__init__()

self.tcn = nn.Sequential(

CausalConv1d(in_dim, 32, 3, dilation=1),

nn.ReLU(),

CausalConv1d(32, 64, 3, dilation=2),

nn.ReLU(),

CausalConv1d(64, 64, 3, dilation=4),

)

self.gru = nn.GRU(64, hid_dim, batch_first=True)

self.fc = nn.Linear(hid_dim, out_dim)

def forward(self, x):

# x: (B, T, in_dim)

x = x.permute(0,2,1) # (B, in_dim, T)

x = self.tcn(x).permute(0,2,1) # (B, T, 64)

out, _ = self.gru(x)

out = self.fc(out[:, -1, :])

return out

class ChannelAttention(nn.Module):

def __init__(self, channels, reduction=8):

super().__init__()

self.gap = nn.AdaptiveAvgPool1d(1)

self.fc = nn.Sequential(

nn.Linear(channels, channels//reduction),

nn.ReLU(),

nn.Linear(channels//reduction, channels),

nn.Sigmoid()

)

def forward(self, x):

b,c,t = x.shape

w = self.gap(x).view(b,c)

w = self.fc(w).view(b,c,1)

return x * w

class ResidualAttentionBlock(nn.Module):

def __init__(self, in_ch, out_ch):

super().__init__()

self.conv1 = nn.Conv1d(in_ch, out_ch, 3, padding=1)

self.cattn = ChannelAttention(out_ch)

self.conv2 = nn.Conv1d(out_ch, out_ch, 3, padding=1)

self.skip = nn.Conv1d(in_ch, out_ch, 1) if in_ch != out_ch else nn.Identity()

def forward(self, x):

residual = self.skip(x)

out = F.relu(self.conv1(x))

out = self.cattn(out)

out = self.conv2(out)

return F.relu(out + residual)

def maml_inner_update(model, support_x, support_y, lr=0.01):

model.train()

loss_fn = nn.MSELoss()

loss = loss_fn(model(support_x), support_y)

grads = torch.autograd.grad(loss, model.parameters(), create_graph=True)

new_params = []

for param, grad in zip(model.parameters(), grads):

new_params.append(param - lr * grad)

# 返回一个新的模型实例,参数更新

new_model = type(model)()

for new_param, param in zip(new_model.parameters(), new_params):

new_param.data.copy_(param.data)

return new_model


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐