故障诊断实例,深度学习框架是pytorch。 多尺度一维卷积神经网络(MS-1DCNN),西储大学故障诊断识别率为97.5%(验证集)以上适用于刚上手故障诊断的同学,就是从数据处理,到最后出图可视化完整一套流程,看完这个会对故障诊断流程有个清晰认识。 数据集:凯斯西储大学轴承数据(CWRU)。

先别急着调参,咱们从冰箱里拿出CWRU轴承数据解冻。这数据像是被玩坏的磁带——12kHz采样率的振动信号长得能绕地球三圈。新手最容易卡在数据预处理环节,咱们用numpy直接暴力切片:

def slice_raw(signal, window=1024, overlap=512):
    slices = []
    for i in range(0, len(signal)-window, overlap):
        slices.append(signal[i:i+window])
    return np.array(slices)

这招把两秒长的原始信号剁成1024点的小段,像切香肠一样整齐。注意别让重叠步长太大,否则训练时会遇到亲兄弟样本打架。

归一化也别整花活,直接上均方根:

slices = (slices - np.mean(slices)) / np.std(slices)

现在上主菜——多尺度卷积设计。想象三个并行的卷饼机,分别用3x1、5x1、7x1的擀面杖:

class MultiScaleConv(nn.Module):
    def __init__(self, in_ch=1):
        super().__init__()
        self.branch1 = nn.Sequential(
            nn.Conv1d(in_ch, 16, 3, padding=1),
            nn.BatchNorm1d(16),
            nn.ReLU())
        self.branch2 = nn.Sequential(
            nn.Conv1d(in_ch, 16, 5, padding=2),
            nn.BatchNorm1d(16),
            nn.ReLU())
        self.branch3 = nn.Sequential(
            nn.Conv1d(in_ch, 16, 7, padding=3),
            nn.BatchNorm1d(16),
            nn.ReLU())
        
    def forward(self, x):
        return torch.cat([
            self.branch1(x),
            self.branch2(x),
            self.branch3(x)
        ], dim=1)

三个分支像三路情报员,分别捕捉不同尺度的振动特征。注意padding要算准,保持特征长度不变。concat操作相当于把三个报告钉在一起交给上级。

训练时有个小技巧——给早期epoch上大学习率快速收敛:

optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=20, gamma=0.1)

前20轮用0.01的激进学习率冲锋,之后每20轮衰减十倍,像开降落伞一样平稳落地。记得用weight decay防止过拟合,0.001的系数刚刚好。

可视化环节别只会画准确率曲线,试试混淆矩阵:

from sklearn.metrics import ConfusionMatrixDisplay
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=classes)
disp.plot(cmap=plt.cm.Blues, values_format='.0f')
plt.xticks(rotation=45)

你会发现内圈故障0.021英寸和0.028英寸的误判最多——这俩坏蛋的振动特征就像双胞胎。解决办法?加个注意力机制模块或者上时频分析。

完整跑完一轮后别急着关电脑,把模型转成ONNX格式存着:

dummy_input = torch.randn(1, 1, 1024)
torch.onnx.export(model, dummy_input, "ms1dcnn.onnx")

下次部署到嵌入式设备时能少掉几根头发。整个流程走下来,你会发现故障诊断其实就是数据变形记——把振动信号搓圆捏扁,直到故障特征自己举手投降。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐