卷积神经网络(CNN):
双向长短时记忆网络(BiLSTM):
长期依赖建模:标准LSTM 网络通过引入记忆单元和门控机制结构,可以更好地捕捉和记忆序列数据中的长期依赖关系。但其只有前向传播运算,缺乏前后的逻辑性。双向长短时记忆网络(BiLSTM)是在LSTM的基础上,利用已知时间序列和反向位置序列,通过前向和反向传播双向运算,加深对原序列时序特征提取,提高模型输出结果的准确性。BiLSTM神经网络最后输出是前向、反向传播的LSTM输出结果之和。
多头自注意力(SelfAttention):
全局依赖建模:在特征提取的过程中,并不是提取到的所有故障特征都有助于故障诊断。为了提高故障诊断的正确率,因此在特征提取时,有必要引入注意力机制对其进行筛选。在故障识别中,某些异常可能涉及到序列中的多个位置,而不仅仅是局部特定的部分。通过引入多头自注意力,模型能够同时关注序列中的不同部分,更好地捕捉全局依赖关系,从而提高对于整体序列模式的感知能力。
结合这三种层的结构,模型首先通过CNN层来捕捉输入故障序列的空间特征,然后通过双向BiLSTM层来捕捉故障序列时序相关性,最后通过Self-Attention层来更好地理解序列内部的关联。这种综合结构可以更全面地处理故障序列数据。
混淆矩阵:
评价指标计算:
%% 随机划分训练集和测试集
temp = randperm(400);
% 训练集——400个样本
P_train = data(temp(1:350),1:20)';
T_train = data(temp(1:350),21)';
M = size(P_train,2);
% 测试集——50个样本
P_test = data(temp(351:end),1:20)';
T_test = data(temp(351:end),21)';
N = size(P_test,2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train,0,1);
p_test = mapminmax('apply',P_test,ps_input);
t_train = T_train;
t_test = T_test;
%% 数据平铺
p_train = double(reshape(p_train,20,1,1,M));
p_test = double(reshape(p_test,20,1,1,N));
t_train = categorical(t_train)';
t_test = categorical(t_test)';
%% 构造CNN-BiLSTM-Attention网络
layers = [
imageInputLayer([20 1 1],"Name","imageinput")
convolution2dLayer([2 1],16,"Name","conv_1")
batchNormalizationLayer("Name","batchnorm_1")
reluLayer("Name","relu_1")
maxPooling2dLayer([2 1],"Name","maxpool_1")
convolution2dLayer([2 1],32,"Name","conv_2")
batchNormalizationLayer("Name","batchnorm_2")
reluLayer("Name","relu_2")
maxPooling2dLayer([2 1],"Name","maxpool_2")
欢迎感兴趣的小伙伴点击“阅读原文”或上方链接获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~