极易录用!并行结构!GAF-PCNN-AT格拉姆角场和双通道PCNN融合注意力机制的分类/故障识别程序!Excel导入,直接运行

适用平台:Matlab2023版本及以上

本程序参考中文EI期刊《电力自动化设备》12月29号网络首发文献:《基于格拉姆角场与并行CNN的并网逆变器开关管健康诊断》,此外,在此基础上进一步对模型进行复现并改进,该论文推出时间短,复现及改进还没有人应用到其他研究方向,如轴承、变压器、电能质量等方向,这种并行结构区别与传统的搭积木式结构,极易录用!

极易录用!并行结构!GAF-PCNN-AT格拉姆角场和双通道PCNN融合注意力机制的分类/故障识别程序!Excel导入,直接运行_第1张图片

文献解读:这篇文献中,首先,采集一维故障电压与电流信号的时序序列;其次,利用格拉姆角场对其进行变换,将两种一维时序信号转化为格拉姆求和场和格拉姆差场,最后,将生成的两组图像同时送入CNN进行并行学习训练,实现逆变器故障诊断。

极易录用!并行结构!GAF-PCNN-AT格拉姆角场和双通道PCNN融合注意力机制的分类/故障识别程序!Excel导入,直接运行_第2张图片

格拉姆角场的原理:格拉姆角场(GAF)是一种将一维序列转化为图像的方法,分为格拉姆求和(GASF)场和格拉姆差场(GADF)。它对笛卡尔坐标系下的时间序列进行极坐标编码,再通过三角运算生成格拉姆矩阵,从而将一维时间序列转化为二维图像。转换后的图像可以保留数据的时间依赖性和潜在联系特征,同时具有较大的稀疏性,剔除了多模态间的冗余信息。

极易录用!并行结构!GAF-PCNN-AT格拉姆角场和双通道PCNN融合注意力机制的分类/故障识别程序!Excel导入,直接运行_第3张图片

模型改进:我们提出的模型在上述模型基础上作出改进:采用双支路结构,仅需原始故障波形数据,即可根据波形数据,将一维序列转化为二维格拉姆角场图像。①一路为GASF求和场输入经CNN提取和场图像特征,②另一路为GADF格拉姆差场,输入经CNN提取差场图像特征,实现两类高维图像特征融合。③融合多头注意力机制有效把握提取特征的贡献程度,将特征进行重点强化,提高故障识别的准确率,并计算精确度、召回率、精确率、F1分数等评价指标。故障识别流程如下:

极易录用!并行结构!GAF-PCNN-AT格拉姆角场和双通道PCNN融合注意力机制的分类/故障识别程序!Excel导入,直接运行_第4张图片

创新点:

1、多通道输入:将二维GASF和GADF图像融合,可以综合利用不同格拉姆角场的信息,从而更全面地描述数据的特征。这有助于提取更丰富、更有区别性的特征,从而提高分类和识别的准确性。

2、空间特征学习:CNN(卷积神经网络)在图像处理中表现出色,能够有效地学习图像的空间特征和局部模式。将CNN用于图像数据的处理可以帮助提取图像的纹理、形状和边缘等特征,有助于更准确地进行分类和故障识别。

3、融合优势:通过融合不同图像模态的信息,算法可以弥补两种二维图像各自的局限性。例如,GASF图像可能对于某些故障模式更敏感,而GADF则对于其他模式更敏感。将它们结合起来,可以增强算法的鲁棒性和泛化能力。

4、多头自注意力机制:融合多头注意力机制有效把握提取特征的贡献程度,将特征进行重点强化,提高故障识别的准确率。

6、提高泛化能力:多模态融合可以帮助算法更好地理解数据的本质特征,从而减少过拟合的风险,提高算法在新数据上的泛化能力。

适用领域:适用于各种数据分类场景,如滚动轴承故障、变压器油气故障、电力系统输电线路故障区域、绝缘子、配网、电能质量扰动,等领域的识别、诊断和分类。

直接替换数据就可以,使用Excel表格直接导入,不需要对程序大幅修改。程序内有详细注释,便于理解程序运行。

数据格式:一行一个样本,最后一列为样本所属的故障类型标签

极易录用!并行结构!GAF-PCNN-AT格拉姆角场和双通道PCNN融合注意力机制的分类/故障识别程序!Excel导入,直接运行_第5张图片

程序结果:(由上述一维序列自动转化为格拉姆图像)

极易录用!并行结构!GAF-PCNN-AT格拉姆角场和双通道PCNN融合注意力机制的分类/故障识别程序!Excel导入,直接运行_第6张图片

极易录用!并行结构!GAF-PCNN-AT格拉姆角场和双通道PCNN融合注意力机制的分类/故障识别程序!Excel导入,直接运行_第7张图片

部分代码:

完整代码: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');

部分图片来源于网络,侵权联系删除!

欢迎感兴趣的小伙伴联系小编获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~

你可能感兴趣的:(分类,GAF,GASF,GADF,格拉姆角场,双通道输入,卷积)