故障诊断实例,深度学习框架是pytorch。 多尺度一维卷积神经网络(MS-1DCNN),西储...
多尺度一维卷积神经网络(MS-1DCNN),西储大学故障诊断识别率为97.5%(验证集)以上适用于刚上手故障诊断的同学,就是从数据处理,到最后出图可视化完整一套流程,看完这个会对故障诊断流程有个清晰认识。前20轮用0.01的激进学习率冲锋,之后每20轮衰减十倍,像开降落伞一样平稳落地。整个流程走下来,你会发现故障诊断其实就是数据变形记——把振动信号搓圆捏扁,直到故障特征自己举手投降。你会发现内圈故
故障诊断实例,深度学习框架是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")
下次部署到嵌入式设备时能少掉几根头发。整个流程走下来,你会发现故障诊断其实就是数据变形记——把振动信号搓圆捏扁,直到故障特征自己举手投降。
更多推荐
所有评论(0)