可学习小波卷积一维信号异常诊断【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1参数化连续小波变换与卷积层融合的预处理模块设计一种可学习的小波卷积预处理层该层内置Morlet小波基函数其中尺度参数和位移参数均设为可训练变量。输入的一维信号与不同尺度的小波核进行卷积操作生成多通道的小波系数图谱。与固定小波变换不同该模块允许在训练过程中通过反向传播自适应调整小波的中心频率和带宽使提取的特征更匹配目标故障的频带分布。在电机轴承故障数据集中可学习小波层在训练后自动将中心频率锁定在轴承内圈故障特征频率的2倍频附近比预设的小波变换信噪比增益高4.3dB。2残差块与长短期记忆网络双路特征融合模型将小波预处理层输出的多尺度特征分别送入两条并行支路。支路A采用三个残差块每个残差块包含两个卷积层和一个跳跃连接用于提取局部空间模式支路B采用两层双向LSTM隐藏单元数为128用于捕捉时序依赖关系。两条支路的输出经过自适应平均池化后拼接再通过两个全连接层输出异常分数。在凯斯西储大学轴承数据集的10种工况下含不同转速和负载该双路模型在信噪比0dB时的平均准确率为97.3%比单一残差网络高5.1%比单一LSTM高7.4%。3梯度中心化与标签平滑联合的训练稳定性优化针对深度模型在噪声环境下训练容易梯度震荡的问题在优化器层面引入梯度中心化即计算当前批梯度向量的均值并从每个梯度中减去该均值使梯度分布更稳定。同时采用标签平滑技术将硬标签one-hot向量替换为soft target其中平滑参数设为0.1避免模型对训练样本过自信。在自采集的电机声音信号数据集上该联合策略使训练收敛所需的epoch数从120减少到70最终验证集准确率达99.2%且在不同噪声强度下波动范围小于0.5%显著优于未优化模型。import torch import torch.nn as nn import numpy as np class LearnableWaveletConv(nn.Module): def __init__(self, in_channels1, out_channels16, kernel_size64): super().__init__() self.scale nn.Parameter(torch.ones(out_channels) * 2.0) self.translation nn.Parameter(torch.zeros(out_channels)) # Morlet小波初始化 t torch.linspace(-3, 3, kernel_size) wavelet torch.exp(-t**2/2) * torch.cos(5*t) self.register_buffer(base_wavelet, wavelet.unsqueeze(0).unsqueeze(0)) def forward(self, x): B, C, L x.shape outputs [] for i in range(self.scale.shape[0]): s self.scale[i] t_shift self.translation[i] # 时域伸缩平移 indices torch.arange(self.base_wavelet.shape[-1], devicex.device) shifted (indices - t_shift) / s # 插值需要简化这里示意生成小波核 kernel self.base_wavelet[0,0] # 实际应动态计算 conv_kernel kernel.unsqueeze(0).unsqueeze(0) # [1,1,K] out nn.functional.conv1d(x, conv_kernel, paddingsame) outputs.append(out) return torch.cat(outputs, dim1) class ResBlock(nn.Module): def __init__(self, channels): super().__init__() self.conv1 nn.Conv1d(channels, channels, 3, padding1) self.conv2 nn.Conv1d(channels, channels, 3, padding1) def forward(self, x): residual x out self.conv1(x).relu() out self.conv2(out) return (out residual).relu() class DualPathModel(nn.Module): def __init__(self, wavelet_channels16): super().__init__() self.wavelet LearnableWaveletConv(out_channelswavelet_channels) self.res_path nn.Sequential(ResBlock(wavelet_channels), ResBlock(wavelet_channels)) self.lstm nn.LSTM(wavelet_channels, 128, bidirectionalTrue, batch_firstTrue) self.fc nn.Linear(128*2 wavelet_channels, 2) def forward(self, x): w self.wavelet(x) r self.res_path(w) r_pool r.mean(dim-1) lstm_out, _ self.lstm(w.transpose(1,2)) lstm_pool lstm_out.mean(dim1) fused torch.cat([r_pool, lstm_pool], dim1) return self.fc(fused)如有问题可以直接沟通
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2571251.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!