传统模型用腻了?GCN图卷积神经网络一键实现西储大学轴承故障诊断!发文新思路! 目录数据介绍与故障诊断讲解1.数据预处理2.特征提取模型流程与创新点GCN图卷积神经网络结果展示部分代码展示完整代码今天为大家带来一期利用GCN图卷积神经网络模型一键实现西储大学轴承故障诊断代码与原理讲解非常新颖需要注意的是本期代码直接附带了处理好的西储大学轴承数据集并且是Excel格式已经帮大家替换到了程序里大家使用的时候只需要一键运行main即可出来所有图片与故障诊断结果还有打印出来的损失函数曲线非常方便不像其他程序一样需要运行很多文件适合新手小白当然如果你想替换成自己的其他分类数据集也非常方便只需替换Excel文件即可无需更改代码数据介绍与故障诊断讲解此处使用的数据是西储大学官方的轴承数据首先说一下该数据集的处理步骤以及来源1.数据预处理取官方下载的驱动端DE振动数据分别为97.mat、107.mat、120.mat、132.mat、171.mat、187.mat、199.mat、211.mat、224.mat、236.mat即转速为1750时的10种故障诊断类型包括正常情况并将所有的数据和类别综合到一个变量中。下图即为12K采样频率下的驱动端轴承故障数据*表示数据不可用2.特征提取利用VMD算法选择最佳参数K和α这里可利用各种优化算法进行优化基于包络熵最小的准则提取每个样本的最佳IMF分量并丢弃其他分量因为最佳IMF分量已经包含了故障特征的丰富信息然后对最佳IMF分量的9个指标进行计算分别是均值方差峰值峭度有效值峰值因子脉冲因子波形因子裕度因子对应特征1-9类别即故障类型都已经整理好放在了Excel里如下图所示最后像往常一样根据10种不同的故障类型直接送入模型进行分类预测即可这里顺便说一下10种不同的故障类型分别是什么意思类别1正常情况类别2直径0.007英寸转速为1750时的内圈故障类别3直径0.007英寸转速为1750时的滚动体故障类别4直径0.007英寸转速为1750时的外圈故障类别5直径0.014英寸转速为1750时的内圈故障类别6直径0.014英寸转速为1750时的滚动体故障类别7直径0.014英寸转速为1750时的外圈故障类别8直径0.021英寸转速为1750时的内圈故障类别9直径0.021英寸转速为1750时的滚动体故障类别10直径0.021英寸转速为1750时的外圈故障也就是说我们做故障诊断的目的就是为了判断出它到底是什么故障之后我们才根据故障类型采取有效的解决措施更换自己的数据时也只需最后一列放类别其余列放特征即可无需更改代码非常方便模型流程与创新点以下这些文字如果大家需要用这个程序写论文都是可以直接搬运的GCN图卷积神经网络图卷积神经网络可以有效地从大量样本中学习到相应的特征避免了复杂的特征提取过程。另外图卷积神经网络通过简单的非线性模型从原始数据中提取更加抽象的特征在整个过程中只需少量的人工参与所以采用图卷积神经网络对不同故障特征进行分类具有不错的分类效果。GCNNs本质上是采用图论的方法对二维图片的体征进行提取和运算然后采用不同的卷积核来提取图形特征。其中图包含有向图和无向图其结构Gc可表示如下式中V为顶点E为边。图结构Gc(V,E)的特征信息可以用拉普拉斯矩阵的形式表示其表达式为采用归一化的拉普拉斯方程表示为其中式中A为图的邻接矩阵IN为N阶的单位矩阵D为图中各顶点的度矩阵Aij为图中点ij的邻接矩阵。图形的关系矩阵经过傅里叶变换之后图卷积公式的表达式为式中x为图的Nd维信号x∈RNdg为卷积核U为拉普拉斯矩阵L的特征向量。图卷积神经网络的基本结构如下图所示从GCNNs的结构图中可以看出完整的GCNNs包含输入层、隐藏层和输出层它的层与层之间的传播方式可以表述为其中式中I为单位矩阵D为A的度矩阵H为每一层节点的特征向量矩阵σ为非线性激活函数W(l)为当前层卷积的可训练的参数矩阵l为网络层的标号。在我们的模型中邻接矩阵为不同特征之间的Spearson相关系数不同特征被视作节点以此输入进GCN中结果展示这里已经贴心的帮大家把损失函数曲线图变成矢量图形式方便大家放到论文里损失函数曲线图训练集预测结果测试集预测结果训练集混淆矩阵测试集混淆矩阵以上所有图片作者都已精心整理过代码都可以一键运行main直接出图不像其他代码一样需要每个文件运行很多次不信的话可以看下面文件夹截图仅仅只有4个文件非常清晰明了适用平台Matlab2022a版本及以上没有的文件夹里已免费提供安装包部分代码展示%% 清空环境变量 warning off % 关闭报警信息 close all % 关闭开启的图窗 clear % 清空变量 clc % 清空命令行 %% 读取数据 res xlsread(故障诊断数据集.xlsx); %% 分析数据 num_class length(unique(res(:, end))); % 类别数Excel最后一列放类别 num_res size(res, 1); % 样本数每一行是一个样本 num_size 0.7; % 训练集占数据集的比例 res res(randperm(num_res), :); % 打乱数据集不打乱数据时注释该行 flag_conusion 1; % 标志位为1打开混淆矩阵要求2018版本及以上 f_ size(res, 2) - 1; % 输入特征维度 %% 设置变量存储数据 P_train []; P_test []; T_train []; T_test []; %% 划分数据集 for i 1 : num_class mid_res res((res(:, end) i), :); % 循环取出不同类别的样本 mid_size size(mid_res, 1); % 得到不同类别样本个数 mid_tiran round(num_size * mid_size); % 得到该类别的训练样本个数 P_train [P_train; mid_res(1: mid_tiran, 1: end - 1)]; % 训练集输入 T_train [T_train; mid_res(1: mid_tiran, end)]; % 训练集输出 P_test [P_test; mid_res(mid_tiran 1: end, 1: end - 1)]; % 测试集输入 T_test [T_test; mid_res(mid_tiran 1: end, end)]; % 测试集输出 end %% 数据转置 P_train P_train; P_test P_test; T_train T_train; T_test T_test; %% 得到训练集和测试样本个数 M size(P_train, 2); N size(P_test , 2); %% 数据归一化 [P_train, ps_input] mapminmax(P_train, 0, 1); P_test mapminmax(apply, P_test, ps_input); %% 数据平铺 % 将数据平铺成1维数据只是一种处理方式 % 也可以平铺成2维数据以及3维数据需要修改对应模型结构 % 但是应该始终和输入层数据结构保持一致 p_train double(reshape(P_train, f_, 1, M)); p_test double(reshape(P_test , f_, 1, N)); t_train T_train; t_test T_test ; %% 设置超参数 parameters struct; % 初始化结构 numHiddenFeatureMaps 32; % 隐藏层节点数 numInputFeatures size(p_train, 2); % 输入特征数目非节点数目 %% 初始化网络权重 1完整代码点击下方小卡片后台回复关键字不区分大小写故障诊断单品其他更多需求或想要的代码均可点击下方小卡片后后台私信看到后会秒回~更多代码链接更多代码链接