MATLAB图注意力网络GAT多标签图分类预测可视化

全文链接:https://tecdat.cn/?p=38321

本示例展示了如何使用图注意力网络(GATs)对具有多个独立标签的图进行分类。当数据中的观测值具有带有多个独立标签的图结构时,可以使用GAT来预测未知标签观测值的标签点击文末“阅读原文”获取完整代码数据)。

GAT利用图结构和图节点上的可用信息,通过一种掩码多头自注意力机制聚合相邻节点的特征,并为图中的每个节点计算输出特征或嵌入。在通常情况下,使用读出(readout)或图池化操作对节点的输出特征进行聚合或汇总后,这些输出特征将用于对图进行分类。

数据集介绍

本示例使用QM7 - X数据集训练GAT,该数据集包含6950个表示分子的图。每个分子由最多23个原子(以节点表示)组成。数据集中包含5种独特的原子:碳(C)、氢(H)、氮(N)、氧(O)和硫(S)。原子的三种物理化学性质(标量Hirshfeld偶极矩、原子极化率和范德华半径)被用作节点信息。图标签是在分子形成中起重要作用的官能团或特定原子组。每个官能团代表一个子图,因此,如果代表图的分子没有官能团,则图可以有多个标签或没有标签。本示例考虑的官能团有CH、CH2、CH3、N、NH、NH2、NOH和OH。
0470224cbafd04d73d30e7cfe460d887.png

数据准备

(一)加载数据

数据是一个包含5个字段的结构体。atNUM字段包含原子序数,atXYZ字段包含节点坐标,hDIPatPOLvdwR字段包含节点特征。数据总共由6950个图组成,每个图最多有23个节点。对于节点数少于23个的图,数据用零填充。

(二)准备训练数据

  1. 提取和连接节点特征

features = cat(3,dataQM7X.hDIP,dataQM7X.atPOL,dataQM7X.vdwR)
features = permute(features,\[1 3 2\])
  1. 构建邻接矩阵数据

atomicNumber = dataQM7X.atNUM
coordinates = dataQM7X.atXYZ
adjacency = coordinates2Adjacency(coordinates,atomicNumber)
  1. 提取标签

labels = uniqueFunctionalGroups(adjacency,atomicNumber)
  1. 划分数据集

对训练特征(不包括填充数据的零元素)进行归一化:

numGraphsTrain = size(featuresTrain,3)
for j = 1:numGraphsTrainvalidIdx = 1:nnz(featuresTrain(:,1,j))featuresTrain(validIdx,:,j) = (featuresTrain(validIdx,:,j) - muX)./sqrt(sigsqX)
end

对验证特征使用相同的统计数据进行归一化,并排除填充数据的零元素

  1. 获取类别名称和编码训练标签

可视化每个类别的图数量:

classCounts = sum(TTrain,1)
figure
bar(classCounts)
ylabel("Count")
xticklabels(classNames)

0378ae9642ff709d03c62fd2613ac8dd.png
可视化每个图的标签数量

63322fd71a4728e37b7ce7b7ffded7a1.png
对验证标签进行编码

  1. 创建数据存储和组合数据

为验证特征和邻接数据创建数据存储并组合:

featuresValidation = arrayDatastore(featuresValidation,IterationDimension=3)
adjacencyValidation = arrayDatastore(adjacencyValidation,IterationDimension=3)
dsValidation = combine(featuresValidation,adjacencyValidation)

模型定义

(一)模型概述

模型输入特征矩阵X和邻接矩阵A,输出分类预测。模型利用掩码多头自注意力机制聚合节点邻域的特征(节点邻域是指与该节点直接相连的节点集合),邻接矩阵生成的掩码用于防止不同邻域节点之间的注意力计算。模型在前两个注意力算子后使用ELU非线性激活函数,并在最后两个注意力算子之间使用跳跃连接以帮助收敛。利用平均法对输出节点特征进行图级预测,最后使用sigmoid操作计算独立的类别概率。

(二)初始化模型参数

  1. 创建注意力头数量结构体

numHeads = struct
numHeads.attn1 = 3
numHeads.attn2 = 3
numHeads.attn3 = 5
  1. 创建模型可学习参数结构体并初始化权重

初始化第二个注意力操作的权重

初始化第三个注意力操作的权重

(三)定义模型函数和损失函数

创建model函数,其输入模型参数、输入特征和邻接矩阵以及每个图的节点数,返回标签预测。创建modelLoss函数,其输入模型参数、一批输入特征和相应的邻接矩阵、每个图的节点数以及相应的编码标签目标,返回损失、损失相对于可学习参数的梯度以及模型预测。

训练选项指定

训练70个轮次,小批量大小为300。GATs的大训练小批量数据可能导致内存不足错误,如果硬件内存不足,则减小小批量大小。训练学习率为0.01,将预测概率转换为二进制编码标签的阈值设为0.5,每210次迭代验证一次模型。

模型训练

使用自定义训练循环训练模型。利用minibatchqueue处理和管理训练数据小批量。对于每次迭代和小批量:丢弃部分小批量;使用自定义小批量预处理函数preprocessMiniBatch去除数据中的零填充,计算每个图的节点数,并将多个图实例合并为单个图实例;将输出数据类型转换为double;仅将特征数据转换为dlarray对象;如果有GPU可用,则在GPU上训练。

设置验证数据的数据存储读取大小:

dsValidation.UnderlyingDatastores{1}.ReadSize = miniBatchSize
dsValidation.UnderlyingDatastores{2}.ReadSize = miniBatchSize

初始化Adam优化器参数:

trailingAvg = \[\]
trailingAvgSq = \[\]

训练模型:

da08621c571341407f5f509e6d874ed2.png


点击标题查阅往期内容

a6eeecf8630a2995fc62854b1bf6e559.jpeg

Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码

outside_default.png

左右滑动查看更多

outside_default.png

01

07ee5a8b55dfe20a0acda2631a3f4d53.png

02

e186526c20e9c604565a67c2154c8853.png

03

13b2bbad9c9798bdf913d359b254709d.png

04

050644119d9977bbe0cc1da36cee8ab6.png

模型测试

如果有GPU可用,将测试数据转换为gpuArray对象,并使用训练特征的统计数据对测试特征进行归一化。创建测试特征和邻接数据的数据存储并组合,对测试标签进行编码。

使用modelPredictions函数对测试数据进行预测,并将预测概率转换为二进制编码标签,通过计算F - score评估性能。

可视化每个类别的混淆矩阵和接收者操作特征(ROC)曲线。

使用新数据预测

加载预处理的QM7X样本数据,获取邻接矩阵和节点特征,显示图的节点数,提取图数据,将原子序数映射为符号并显示图。

587015f27217c54ecae61d959dfc2a2c.png
将特征转换为dlarray对象,如果有GPU可用则转换为gpuArray,使用model函数进行预测并将预测概率转换为二进制编码标签,可视化注意力分数。

模型相关函数介绍

  • model函数:输入模型参数、特征矩阵、邻接矩阵、每个图的节点数和头数,返回预测和注意力分数。在每层使用graphAttention函数计算图注意力,前两层使用ELU非线性激活函数,在隐藏层使用残差连接,在最后一层后使用globalAveragePool函数执行读出操作,使用sigmoid函数计算标签预测作为独立的类别概率。

  • modelLoss函数:输入模型参数、特征矩阵、邻接矩阵、每个图的节点数、二进制编码标签返回损失相对于模型参数的梯度、相应的损失和模型预测。

总结

本文详细介绍了基于图注意力网络的多标签图分类方法,包括数据准备、模型定义、训练过程、测试过程以及使用新数据进行预测等环节,并对模型相关的各个函数进行了阐述。这种方法在处理具有图结构和多个独立标签的数据时具有一定的优势,可以为相关领域的研究和应用提供有效的分类模型,在化学分子等具有图结构的数据分类问题中有着潜在的应用价值,通过对模型参数的合理设置和训练,可以提高分类的准确性和可靠性,为进一步的分析和决策提供有力支持。同时,不同的函数在模型的构建和运行中发挥着各自独特的作用,共同构成了完整的图分类系统。但需要注意的是,训练GAT是一个计算密集型任务,在实际应用中需要考虑硬件资源的限制。此外,对于模型的改进和优化可以进一步探索,以适应更复杂的数据集和应用场景。

fd7ebd05fb639945a2767a777331ecc0.jpeg

本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 

f6042fbd8cd8300d64be00130f639880.png


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

88ff18f44c8caed32dc28b3cabed7c52.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《MATLAB图注意力网络GAT多标签图分类预测可视化》。

点击标题查阅往期内容

【视频讲解】Python深度神经网络DNNs-K-Means(K-均值)聚类方法在MNIST等数据可视化对比分析

MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码

R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感

Python用CNN-LSTM、ARIMA、Prophet股票价格预测的研究与分析|附数据代码

【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例

RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

用PyTorch机器学习神经网络分类预测银行客户流失模型

PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

R语言深度学习:用keras神经网络回归模型预测时间序列数据

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

MATLAB中用BP神经网络预测人体脂肪百分比数据

Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

R语言实现CNN(卷积神经网络)模型进行回归数据分析

SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

Python使用神经网络进行简单文本分类

R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

R语言基于递归神经网络RNN的温度时间序列预测

R语言神经网络模型预测车辆数量时间序列

R语言中的BP神经网络模型分析学生成绩

matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

R语言实现拟合神经网络预测和结果可视化

用R语言实现神经网络预测股票实例

使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

9647c83e4ba2efc50a038ddac7813873.jpeg

50224f20452441ce386f1a7fc98c3be1.png

7a69d7eea63bc97e38427382a23e311f.png

f6892330b58087c310dc27fb00a5398a.jpeg

0bcef38b59050cecee3812f14bcf71f3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS优化file控件样式

<div class"file-box"><input type"button" class"btn" value"选择文件" /><inputtype"file"class"file"id"upimg"change"previewFiles"multiple/></div><!-- Vu…

Go语言24小时极速学习教程(三)常见标准库用法

常见标准库 常见标准库即Go语言自带的库&#xff0c;这里的所有包都可以通过import直接引入&#xff0c;如果你觉得实在是不好用&#xff0c;那么请先保证你学会了标准库的基础上&#xff0c;再学一下Gookit&#xff0c;特别是其中的GoUtil&#xff0c;千万不要轻易自己去造轮…

CTF--php伪协议结合Base64绕过

Base64绕过 在ctf中&#xff0c;base64是比较常见的编码方式&#xff0c;在做题的时候发现自己对于base64的编码和解码规则不是很了解&#xff0c;并且恰好碰到了类似的题目&#xff0c;在翻阅了大佬的文章后记录一下&#xff0c;对于base64编码的学习和一个工具 base64编码是…

虚拟网卡驱动和DM9000C移植

网卡驱动程序框架 网卡驱动程序“收发功能”&#xff1a; 只要把上层的数据发给网卡&#xff0c;从网卡来的数据构造成包给上层即可。网卡只需要 “socket”编程&#xff0c;不需要打开某设备。 驱动程序都是以面向对象的思想写的&#xff0c;都有相关的结构体。 编程步骤 …

image compare pyqt 实现

默认显示image1, 鼠标滑动滚动条切换图片显示 可视化效果: image_compare.py import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QSlider, QVBoxLayout, QHBoxLayout from PyQt5.QtCore import Qt, QSize from PyQt5.QtGui import QPixmap, QPainte…

【单片机基础】定时器/计数器的工作原理

单片机中的定时器/计数器&#xff08;Timer/Counter&#xff09;是用于时间测量和事件计数的重要模块。它们可以用来生成精确的延时、测量外部信号的频率或周期、捕获外部事件的时间戳等。理解定时器/计数器的工作原理对于单片机编程和系统设计非常重要。以下是定时器/计数器的…

在自动驾驶进行大数据量因果推理实验时,如何减少无用功,提高实验效率?

在对实验结果做反事实推理时&#xff0c;通常需要对数据进行多次循环&#xff0c;然后对多次循环的结果进行处理&#xff0c;如果只在最后结果结束时&#xff0c;再进行处理&#xff0c;可能会由于反事实过程中某个参数设置错误&#xff0c;导致整个反事实实验出现错误&#xf…

浅谈软件开发中的yield关键字:从餐厅服务理解异步编程之美

在现代软件开发中&#xff0c;处理大量数据流时经常会遇到性能和内存消耗的问题。传统的编程方式往往是一次性获取所有数据&#xff0c;这就像餐厅厨师要把所有菜品做完才上菜一样&#xff0c;既不高效也不够灵活。而yield关键字的出现&#xff0c;为我们提供了一种优雅的解决方…

绕过CDN寻找真实IP

在新型涉网案件中&#xff0c;我们在搜集到目标主站之后常常需要获取对方网站的真实IP去进一步的信息搜集&#xff0c;但是现在网站大多都部署了CDN&#xff0c;将资源部署分发到边缘服务器&#xff0c;实现均衡负载&#xff0c;降低网络堵塞&#xff0c;让用户能够更快地访问自…

前后端请求响应

引入 在之前的例子中&#xff0c;我们编写了一个简单的web类&#xff0c;我们运行启动类&#xff0c;启动内嵌的tomcat后就可以在浏览器通过特定的路径访问tomcat中的应用程序。 但之前编写的程序仅仅是个简单的java类&#xff0c;其并未实现某个接口或继承某个类&…

深度学习:神经网络中的损失函数的使用

深度学习&#xff1a;神经网络中的损失函数的使用 损失函数是监督学习中的关键组成部分&#xff0c;用于衡量模型预测值与真实值之间的差异。优化算法&#xff08;如梯度下降&#xff09;通过最小化损失函数来调整模型参数&#xff0c;以提高模型的预测精度。以下是几种常用的…

ThreeJS入门(142):THREE.WebGLRenderTarget 知识详解,示例代码

作者&#xff1a; 还是大剑师兰特 &#xff0c;曾为美国某知名大学计算机专业研究生&#xff0c;现为国内GIS领域高级前端工程师&#xff0c;CSDN知名博主&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;webgl&#xff0c;ThreeJS&#xff0c;canvas&#xf…

GitLab 部署和配置指南

GitLab 部署和配置指南 1. GitLab 容器配置概述 在部署 GitLab 时&#xff0c;可能涉及以下几部分内容&#xff1a; 内置 Nginx 的配置和调整。HTTPS 证书的申请、使用和续期。通过 FRP 映射内网服务到外部服务器。阿里云服务器的 Nginx 配置和反向代理。 本文将完整涵盖这…

Streamlit + AI大模型API实现视频字幕提取

简介 在本文中&#xff0c;我将带你探讨如何使用Streamlit和AI大模型API来实现视频字幕提取的技术。Streamlit是一个开源的Python库&#xff0c;用于快速构建数据应用的Web界面&#xff0c;而AI大模型API&#xff0c;如OpenAI&#xff0c;提供了强大的语言处理能力&#xff0c…

SpringBoot - spring.profiles.active最佳实践

文章目录 Pre概述为什么需要多环境配置多环境配置实现步骤1. 配置文件准备2. 激活特定环境方法1&#xff1a;命令行参数方法2&#xff1a;环境变量方法3&#xff1a;IDE 配置方法4&#xff1a;全局配置文件默认设置 3. 配置文件加载顺序配置生效的原理 4. 常见问题多个配置文件…

深入理解 Vue 3 中的 emit

深入理解 Vue 3 中的 emit 在 Vue 3 中&#xff0c;组件通信是开发中非常重要的一部分&#xff0c;其中通过 emit 实现父子组件通信是最常见的方式之一。emit 的作用是&#xff1a;子组件可以通过触发自定义事件将数据传递给父组件。 在本篇文章中&#xff0c;我们将从以下几…

C++结构型设计模式之适配器模式概述

适配器模式的意图和动机 意图&#xff1a;适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;其意图是将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。 动机&#xff1a…

网安瞭望台第2期:零日漏洞密集爆发、2024年常见网络安全漏洞类型及分析

国内外要闻 Ubuntu 服务器 Needrestart 软件包惊现严重安全漏洞 近日&#xff0c;Ubuntu 服务器&#xff08;自 21.04 版本起默认安装&#xff09;的 Needrestart 软件包被曝存在多个可追溯至数十年前的安全漏洞。这些漏洞允许本地攻击者在无需用户交互的情况下获取根…

【Linux】apt 关闭 ssl 认证

【注意】apt 关闭 ssl 认证可能会引起软件安装风险&#xff0c;请尽量避免关闭。 执行以下命令可以实现全局关闭 sll 验证。 echo Acquire::https::Verify-Peer "false"; >> /etc/apt/apt.conf.d/99disable-signature-verificationecho Acquire::https::Verif…

Java前端基础——CSS

一、CSS介绍 1.1 什么是CSS CSS(Cascading Style Sheet)&#xff0c;层叠样式表,用于控制页面的样式. CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离. 1.2 基本语法规范 选择器 {⼀条/N条声明} • 选择器决定针…