图注意力网络

news2024/11/13 23:33:49

【图书推荐】《图神经网络基础、模型与应用实战》_搭建神经网络需要看什么书-CSDN博客

图注意力网络的由来和发展

图注意力网络(GAT)是一种图神经网络(GNN)模型,最早由Petar Velickovic等在2017年提出。它的设计灵感来自自然语言处理领域中的注意力机制,旨在处理图数据时引入注意力机制,以便更好地捕捉节点之间的关系和信息。

注意力机制最初用于自然语言处理中的机器翻译任务,是由Bahdanau等在2014年提出的。这一机制允许模型在生成目标语言的每个单词时,根据源语言句子中的不同部分动态地分配注意力权重。图卷积神经网络借鉴了这个思想,将其应用于图数据中的节点和邻居节点。

图卷积神经网络的关键思想是:为每个节点动态计算邻居节点的注意力权重,并使用这些权重对邻居节点的特征进行加权求和,从而生成节点的表示。这允许节点有选择性地关注与其相关性较高的邻居节点,使模型能够更好地学习节点之间的关系。

图注意力网络模型代码实现

以下是一个简单的Python代码示例,演示了如何使用PyTorch实现一个基本的图注意力网络模型。请注意,在实际应用中,你可能需要使用更复杂的图注意力网络变体,例如多头图注意力网络,以获得更好的性能。

我们新引入了一个torch_geometric库,这是一个用于图神经网络的PyTorch扩展库,专门用于处理和分析图数据。它提供了许多功能和工具,使得在图结构数据上进行深度学习任务更加方便和高效。

使用这个库需要提前安装,安装命令如下:

pip install torch_geometric

图注意力网络模型代码如下:

import torch
import torch.nn as nn
import torch. optim as optim
import torch. nn. functional as F
from torch_geometric.datasets import KarateClub 
from torch_geometric. data import DataLoader
from torch_geometric. nn import GATConv

#创建一个图注意力网络的类
class GATNetwork(nn. Module):
    def __init__(self, num_features, num_classes, num_heads): 
        super(GATNetwork, self).__init__()
        self.conv1= GATConv(num_features, 8, heads=num_heads) 
        self.conv2 = GATConv(8 * num_heads, num_classes, dropout=0.6)
    def forward(self, data):
        x, edge_index=data.x, data. edge_index
        x= F.relu(self.conv1(x, edge_index))
        x = F. dropout(x, training-self. training)
        x = self. conv2(x, edge_index)
        return F. log_softmax(x, dim=1)
#创建训练函数
def train(model, train_loader, optimizer, device):
    model. train()
    loss_all= 0
    for data in train_loader:
        data = data. to(device)
        optimizer. zero_grad()
        output=model(data)
        loss = F. nll_loss(output, data.y)
        loss. backward()
        loss_all += loss.item()
        optimizer. step()
    return loss_all/ len(train_loader)
#创建测试函数
def test(model, test_loader, device):
    model. eval()
    correct=0
    for data in test_loader:
        data=data. to(device)
        output = model(data)
        pred=output. max(dim=1) [1]
        correct += pred. eq(data. y). sum().item() 
    return correct/len(test_loader.dataset)

这段代码实现了一个基于图神经网络的图分类模型,并提供了训练和测试函数,可以用于学习和评估图数据集上的分类任务。这种类型的模型在图数据分析和节点分类等领域应用广泛。

#超参数设置
num_epochs = 200
lr = 0.005
num_heads = 8
#加载数据集
dataset = KarateClub()
data = dataset [0]
#创建数据加载器
loader = DataLoader(dataset, batch_size=1, shuffle=True)

#初始化模型和优化器
model = GATNetwork(dataset. num_features, dataset. num_classes, num_heads) 
device = torch. device('cuda' if torch. cuda. is_available() else 'cpu') 
model = model. to(device)
optimizer=optim. Adam(model. parameters(), lr=lr)

#训练和测试模型
for epoch in range(1, num_epochs + 1):
    loss = train(model, loader, optimizer, device)
    acc=test(model, loader, device)
    if epoch%20== 0:
        print(f' Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f}')

print("Training finished. ")

上述代码主要用于初始化模型、设置优化器、设置超参数和进行多轮训练。

代码运行结果如下:

 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
 Epoch: epoch), Loss: loss:.4f), Accuracy: [acc:.4f]
Training finished. 

《图神经网络基础、模型与应用实战(人工智能技术丛书)》(兰伟,叶进,朱晓姝)【摘要 书评 试读】- 京东图书 (jd.com)

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

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

相关文章

Java基础-I/O流

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 字节流 定义 说明 InputStream与OutputStream示意图 说明 InputStream的常用方法 说明 OutputStrea…

Qt基础 | Qt Creator的基本介绍与使用 | 在Visual Studio中创建Qt项目

文章目录 一、Qt Creator的基本介绍与使用1.新建一个项目2.项目的文件组成3.项目文件介绍3.1 项目管理文件3.2 界面文件3.3 主函数文件3.4 窗体相关的文件 4.项目的编译、调试与运行 二、在Visual Studio中创建Qt项目 Qt C开发环境的安装,请参考https://liujie.blog…

C1W1.LAB.Preprocessing+Word frequencies+Logistic_regression_model

理论课:C1W1.Sentiment Analysis with Logistic Regression 文章目录 预处理导入包Twitter dataset简介查看原始文本处理原始文本处理超链接、Twitter 标记和样式分词去除标点和停用词词干处理 process_tweet() 词频构建与可视化导入包加载数据集字典字典实例添加或…

cesium 实现地图环境功能 - 雨,雪,雾特效

需求背景解决效果Codeindex.vuefogEffect.tsrain.glslsnow.glslfog.glsl 需求背景 需要实现天气模拟,日照模拟功能,提高三维实景效果 解决效果 Code 注意:我以下glsl文件时基于 webgl1.0,即cesium,创建球的时候&…

ES的使用示例

1.安装 ES的安装对springboot的版本配置要求很高,需要根据如下的目录下载对应的版本。 查看自己项目所使用的springboot和spring的版本,对应下载文件。 下载链接地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-…

微软GraphRAG原理介绍(附带部分源码)

我们前几天写了一篇文章,简单跑了一下GraphRAG看了下效果,没看过这篇文章的可以看下https://www.luxinfeng.top/article/动手实操微软开源的GraphRAG。今天我们介绍一下GraphRAG的实现原理,关于实验对比的内容,我会在下一篇文章中…

48V电源架构解析

48V电源架构解析 48V系统的诞生 汽车在1918年引入蓄电池,到1920年逐渐普及,当时的电池电压是6V。后来,随着内燃机排量的增加以及高压缩比内燃机的出现,6V系统已经不能满足需求,于是在1950年引入了12V系统。大多数汽车…

【python学习】标准库之数学相关math库的定义、功能、使用场景、代码示例和第三方数学相关库NumPy

引言 math模块是Python标准库的一部分,它提供了一系列基本的数学函数和常数。这些函数和常数对于日常的数学运算非常有用,例如计算平方根、计算余弦值等。 文章目录 引言一、math的定义二、math的功能2.1 基本的数学运算2.2 数学常数2.3 随机数 三、math…

八臂-聚乙二醇-生物素;8ARM-PEG-Biotin

一、基本信息 名称:八臂PEG生物素、八臂-聚乙二醇-生物素、Octa-arm PEG Biotin、8ARM-PEG-Biotin 结构:具有八个分支的PEG链,每个分支末端连接生物素分子 状态:固体/粉末/溶液,具体取决于产品规格和存储条件 纯度&…

论文去AI痕秘籍:轻松几步,守护你的学术原创性

如何有效降低AIGC论文的重复率,也就是我们说的aigc如何降重?AIGC疑似度过高确实是个比较愁人的问题。如果你用AI帮忙写了论文,就一定要在交稿之前做一下AIGC降重的检查。一般来说,如果论文的AIGC超过30%,很可能会被判定…

Qt|QTreewidget类下函数qt助手详解说明示例(二)

上篇:Qt|QTreewidget类下函数qt助手详解说明示例(一) 该系列持续更新,喜欢请一键三连,一起学习进步,升职加薪,感谢各位大佬。 QT5.14.2 参考官方QT助手 Kimi辅助说明 文章目录 insertTopLevelI…

浅学三次握手

数据要完成传输,必须要建立连接。由于建立TCP连接的过程需要来回3次,所以,将这个过程形象的叫做三次握手。 结合上面的图来看更清楚。 先说三次握手吧,连接是后续数据传输的基础。就像我们打电话一样,必须保证我和对方…

工作是为了什么

如果经常和总监及以上的领导聊天,就会发现他们与咱们一线程序员的最大不同,并不是编程技能多高深精通,而是分析问题、认知世界的方式。 程序员只关注工作领域的“一亩三分地”,实质上是放弃了自己成长的机会,在工作的…

软件测试——非功能测试

工作职责: 1.负责产品系统测试,包括功能测试、性能测试、稳定性测试、用户场景测试、可靠性测试等。 2.负责测试相关文档的编写,包括测试计划、测试用例、测试报告等。 3.负责自动化测试框架、用例的维护。 岗位要求: 1.熟练…

解决mysql,Navicat for MySQL,IntelliJ IDEA之间中文乱码

使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久,网上的方法基本上都试过了,终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法&#xff1a…

53 传输层

作用:负责数据能够从发送端传输接收端 再谈端口号 端口号(port)标识了一个主机上进行通信的不同的应用程序 在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”&#xff0c…

陶晶驰串口屏与arduino uno通信,远程控制arduino 2560上的LED

一 材料清单 arduino uno 1个 arduino 2560 1个 nrf24l01 2个 陶晶驰串口屏 1个 二 本文目的 通过串口屏触摸按键远程控制arduino 2560上的LED 点亮。 三 硬件接线 3.1 发射端接线 3.1.1uno和发射模块接线 nRF24L01 与Arduino UNO接线如…

你也想做一个Elemen-ui吧!!!——Blueの前端路

目录 前言 diglog组件 准备工作: 在diglog.vue中模仿element-ui搭建diglog框架 该组件需要完成的任务: title diglog.vue代码: App.vue代码: 效果: 自定义dialog的宽度和距离顶部的 App.vue代码:…

Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)

导航 Mamba 及 Vim 安装问题参看本人之前博客:Mamba 环境安装踩坑问题汇总及解决方法Windows 下 Mamba 的安装参看本人之前博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)Linux 下VMamba 安…

前端面试题(JS篇三)

一、|| 和 && 操作符的返回值? || 和 && 首先会对第一个操作数执行条件判断,如果其不是布尔值就先进行 ToBoolean 强制类型转换,然后再执行条件判断。 对于 || 来说,如果条件判断结果为 true 就返回第一个操作数的…