适用平台:Matlab2023版本及以上
本程序参考中文EI期刊《电力自动化设备》12月29号网络首发文献:《基于格拉姆角场与并行CNN的并网逆变器开关管健康诊断》,此外,在此基础上进一步对模型进行复现并改进,该论文推出时间短,复现及改进还没有人应用到其他研究方向,如轴承、变压器、电能质量等方向,这种并行结构区别与传统的搭积木式结构,极易录用!
文献解读:这篇文献中,首先,采集一维故障电压与电流信号的时序序列;其次,利用格拉姆角场对其进行变换,将两种一维时序信号转化为格拉姆求和场和格拉姆差场,最后,将生成的两组图像同时送入CNN进行并行学习训练,实现逆变器故障诊断。
格拉姆角场的原理:格拉姆角场(GAF)是一种将一维序列转化为图像的方法,分为格拉姆求和(GASF)场和格拉姆差场(GADF)。它对笛卡尔坐标系下的时间序列进行极坐标编码,再通过三角运算生成格拉姆矩阵,从而将一维时间序列转化为二维图像。转换后的图像可以保留数据的时间依赖性和潜在联系特征,同时具有较大的稀疏性,剔除了多模态间的冗余信息。
模型改进:我们提出的模型在上述模型基础上作出改进:采用双支路结构,仅需原始故障波形数据,即可根据波形数据,将一维序列转化为二维格拉姆角场图像。①一路为GASF求和场输入经CNN提取和场图像特征,②另一路为GADF格拉姆差场,输入经CNN提取差场图像特征,实现两类高维图像特征融合。③融合多头注意力机制有效把握提取特征的贡献程度,将特征进行重点强化,提高故障识别的准确率,并计算精确度、召回率、精确率、F1分数等评价指标。故障识别流程如下:
创新点:
1、多通道输入:将二维GASF和GADF图像融合,可以综合利用不同格拉姆角场的信息,从而更全面地描述数据的特征。这有助于提取更丰富、更有区别性的特征,从而提高分类和识别的准确性。
2、空间特征学习:CNN(卷积神经网络)在图像处理中表现出色,能够有效地学习图像的空间特征和局部模式。将CNN用于图像数据的处理可以帮助提取图像的纹理、形状和边缘等特征,有助于更准确地进行分类和故障识别。
3、融合优势:通过融合不同图像模态的信息,算法可以弥补两种二维图像各自的局限性。例如,GASF图像可能对于某些故障模式更敏感,而GADF则对于其他模式更敏感。将它们结合起来,可以增强算法的鲁棒性和泛化能力。
4、多头自注意力机制:融合多头注意力机制有效把握提取特征的贡献程度,将特征进行重点强化,提高故障识别的准确率。
6、提高泛化能力:多模态融合可以帮助算法更好地理解数据的本质特征,从而减少过拟合的风险,提高算法在新数据上的泛化能力。
适用领域:适用于各种数据分类场景,如滚动轴承故障、变压器油气故障、电力系统输电线路故障区域、绝缘子、配网、电能质量扰动,等领域的识别、诊断和分类。
直接替换数据就可以,使用Excel表格直接导入,不需要对程序大幅修改。程序内有详细注释,便于理解程序运行。
数据格式:一行一个样本,最后一列为样本所属的故障类型标签
程序结果:(由上述一维序列自动转化为格拉姆图像)
部分代码:
完整代码:https://mbd.pub/o/bread/ZZqYm59v
%% 训练数据
% GASF训练数据
Train_GASF = imageDatastore('GASF训练输入图像',...
'IncludeSubfolders',true,'LabelSource','foldernames');
% GADF训练数据
Train_GADF = imageDatastore('GADF训练输入图像',...
'IncludeSubfolders',true,'LabelSource','foldernames');
% 训练数据标签
trainLables = Train_GADF.Labels;
TrainLables = arrayDatastore(trainLables,"ReadSize",1,"OutputType","cell");
NumTypes = numel(unique(trainLables)); % 故障类别数
%% 测试数据
% GASF测试数据
Test_GASF = imageDatastore('GASF测试输入图像',...
'IncludeSubfolders',true,'LabelSource','foldernames');
% GADF测试数据
Test_GADF = imageDatastore('GADF测试输入图像',...
'IncludeSubfolders',true,'LabelSource','foldernames');
% 测试数据标签
testLables = Test_GADF.Labels;
TestLables = arrayDatastore(testLables,"ReadSize",1,"OutputType","cell");
%% 构建 双通道PCNN-Attention输入网络
lgraph = layerGraph();
% 添加层分支
% 将网络分支添加到层图中。每个分支均为一个线性层组。
tempLayers = [
imageInputLayer([227 227 3],"Name","输入支路1","Normalization","zscore")
convolution2dLayer([7 7],64,"Name","卷积1","BiasLearnRateFactor",0,"Padding",[3 3 3 3],"Stride",[2 2])
batchNormalizationLayer("Name","BN1")
reluLayer("Name","Relu1")
maxPooling2dLayer([3 3],"Name","池化1","Padding",[1 1 1 1],"Stride",[2 2])
fullyConnectedLayer(128,"Name","全连接1")
flattenLayer("Name","展平1")];
lgraph = addLayers(lgraph,tempLayers);
tempLayers = [
imageInputLayer([227 227 3],"Name","输入支路2","Normalization","zscore")
convolution2dLayer([7 7],64,"Name","卷积2","BiasLearnRateFactor",0,"Padding",[3 3 3 3],"Stride",[2 2])
batchNormalizationLayer("Name","BN2")
reluLayer("Name","Relu2")
maxPooling2dLayer([3 3],"Name","池化2","Padding",[1 1 1 1],"Stride",[2 2])
fullyConnectedLayer(128,"Name","全连接2")
flattenLayer("Name","展平2")];
lgraph = addLayers(lgraph,tempLayers);
tempLayers = [
additionLayer(2,"Name","融合")
selfAttentionLayer(4,128,"Name","自注意力")
fullyConnectedLayer(8,"Name","全连接3")
softmaxLayer("Name","Softmax")
classificationLayer("Name","输出层")];
lgraph = addLayers(lgraph,tempLayers);
% 清理辅助变量
clear tempLayers;
% 连接层分支
% 连接网络的所有分支以创建网络图。
lgraph = connectLayers(lgraph,"展平1","融合/in1");
lgraph = connectLayers(lgraph,"展平2","融合/in2");
%% 网络选项
options = trainingOptions('adam', ...
'MiniBatchSize',15, ...
'InitialLearnRate',0.005, ...
'MaxEpochs',10, ...
'Shuffle','every-epoch', ...
'Verbose',false, ...
'Plots','training-progress');
部分图片来源于网络,侵权联系删除!
欢迎感兴趣的小伙伴联系小编获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~