GASF-CNN故障识别程序: 基于格拉姆角场(GASF)和卷积神经网络(CNN)的故障识别代码,由Excel导入,直接运行!

文摘   教育   2024-10-28 09:06   江苏  
适用平台:Matlab2022版本及以上

本程序参考中文EI期刊《基基于格拉姆角差场和卷积神经网络的宽频振荡分类方法》,程序注释清晰,干货满满,下面对文章和程序做简要介绍!

文献创新点:这篇文献的创新点在于将格拉姆差场(GADF)与卷积神经网络(CNN)相结合,实现故障分类。GADF将一维信号转换为二维特征图,而CNN可以对这些特征图进行自适应的特征提取和分类。通过实验研究,该方法具有更高的分类检测准确率和自适应性。
故障识别流程:

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

格拉姆角场的优势:
格拉姆角场(Gramian Angular Field)相对于时频图的优势体现在以下几个方面:

全局信息保留:格拉姆角场通过计算点积和余弦相似性,更好地保留了时序数据的全局特征。这有助于捕捉时间序列中更为复杂的关系,尤其在存在非线性关系时表现优越。
②不受频域分辨率限制:时频图的性能受限于频域分辨率的选择。高频信号可能需要更高的分辨率,但这可能导致对低频部分的信息丢失。格拉姆角场则无需进行频域变换,不受频域分辨率的限制,对不同频率范围的信号都能够更为鲁棒的表现。
不依赖于时间窗口选择:相较于时频图需要选择适当的时间窗口大小,格拉姆角场则不需要这一步骤。通过考虑整个时间序列的点积和余弦相似性,格拉姆角场减少了参数选择的复杂性,使方法更为通用。
适用于非线性关系:格拉姆角场能够更好地捕捉非线性关系,因为它直接使用点积和余弦相似性,对于一些非线性模式更为敏感。相比之下,时频图在处理非线性关系时可能需要更复杂的变换或更高阶的分析方法。
总结:格拉姆角场在一维时序数据表示方面具有全局信息保留、不受频域分辨率限制、不依赖于时间窗口选择、适用于非线性关系等优势。这些特点使得它在一维时序数据分析中表现出色,特别是在处理复杂的时间关系时具备更大的灵活性和鲁棒性。

程序套用:格拉姆角场分为格拉姆求和(GASF)场和格拉姆差场(GADF),本程序改用格拉姆求和场(GASF)将一维时序生成二维图像,再用CNN提取图像的高维特征,实现故障识别。

输入数据格式:(一行一个样本,最后一列表示故障所属类别标签)

GASF图像生成:

识别结果:(训练集和测试集的混淆矩阵)
训练集和测试集的散点图:

训练曲线:准确率和损失变化图

图像识别部分程序:
% 清除工作区和命令行窗口clcclear all
%% 创建图像数据存储对象,包括图像子文件夹,并以文件夹名称为标签images = imageDatastore('数据集227×227', ... 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
%% 拆分为训练集和测试集,拆分比例为 70% 的训练集和 30% 的测试集% 打乱数据顺序images = shuffle(images);
% 拆分比例为 70% 的训练集和 30% 的测试集[trainSet, testSet] = splitEachLabel(images, 0.7, 'randomized');
%% 构建卷积神经网络层layers = [ imageInputLayer([227 227 3], "Name", "imageinput") % 输入层,定义输入图像的尺寸为 227x227 像素,3个通道(RGB) convolution2dLayer([4 4], 8, "Name", "conv_1", "Padding", "same") % 第一个卷积层,使用4x4的卷积核进行卷积操作,共8个卷积核 batchNormalizationLayer("Name", "batchnorm_1") % 批标准化层,对卷积层的输出进行标准化,提高训练稳定性 reluLayer("Name", "relu_1") % ReLU激活层,增加网络的非线性能力 maxPooling2dLayer([3 3], "Name", "maxpool_1") % 最大池化层,进行3x3的最大池化操作,减小特征图的尺寸 convolution2dLayer([4 4], 16, "Name", "conv_2", "Padding", "same") % 第二个卷积层,使用4x4的卷积核进行卷积操作,共16个卷积核 batchNormalizationLayer("Name", "batchnorm_2") % 批标准化层,对卷积层的输出进行标准化,提高训练稳定性 reluLayer("Name", "relu_2") % ReLU激活层,增加网络的非线性能力 maxPooling2dLayer([3 3], "Name", "maxpool_2") % 最大池化层,进行3x3的最大池化操作,减小特征图的尺寸 convolution2dLayer([4 4], 32, "Name", "conv_3", "Padding", "same") % 第三个卷积层,使用4x4的卷积核进行卷积操作,共32个卷积核 batchNormalizationLayer("Name", "batchnorm_3") % 批标准化层,对卷积层的输出进行标准化,提高训练稳定性 reluLayer("Name", "relu_3") % ReLU激活层,增加网络的非线性能力 fullyConnectedLayer(8, "Name", "fc") % 全连接层,将池化后的特征图连接到一个有8个神经元的全连接层 softmaxLayer("Name", "softmax") % Softmax层,对全连接层的输出进行Softmax变换,得到分类概率 classificationLayer("Name", "classoutput")]; % 分类层,用于输出分类结果
%% 设置训练选项options = trainingOptions('adam', ... % 使用Adam优化器 'MiniBatchSize', 15, ... % 每个迭代的迷你批次大小 'MaxEpochs', 5, ... % 最大训练迭代次数 'InitialLearnRate', 0.001, ... % 初始学习率 'Shuffle', 'every-epoch', ... % 每个迭代都对数据进行洗牌 'Verbose', false, ... % 不显示训练过程中的详细输出 'Plots', 'training-progress'); % 显示训练进度图

%% 使用训练集训练网络[netTransfer,info] = trainNetwork(trainSet,layers,options);

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

完整代码:https://mbd.pub/o/bread/mbd-ZZebmZtt

欢迎感兴趣的小伙伴点击阅读原文上方链接获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~

创新优化及预测代码
免费分享研究理论及方法,基础代码资料,努力提供电力系统相关专业预测及优化研究领域的创新性代码,保质保量!面包多地址:https://mbd.pub/o/yc_yh/work
 最新文章