pytorch|图卷积神经网络(GCN)与图注意力(GAT)在cora数据集的应用

pytorch简单实现GCN 论文:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS 前言:学习图卷积刚入门,看了一篇GNN开山之作,而后看了最开始的四代GCN,每一代都在上代上有所更新,大致明白了GCN的发展以及原理,这篇论文是这个系列最后一篇,也是这篇论文中出现了现在GCN的逐层传播公式,后续最新的图网络都是在这个基础上进行更新,个人觉得这四篇论文对图网络感兴趣的朋友入门还是很有帮助的。 这篇文章主要是针对最终得出来的公式进行翻译,简单测试。 1. 阅读详情

本文实现的两层GCN与GAT在cora数据集上效果,并可视化展示。

1.导入的相关包

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
import pandas as pd
import torch
from torch._C import parse_ir
import torch_geometric
from torch_geometric import datasets
from torch_geometric.data import Data, InMemoryDataset
from torch_geometric.datasets import Planetoid
import torch.nn.functional as F
from torch_geometric.nn import GCNConv,GATConv # GCN
from sklearn.manifold import TSNE

2.数据处理部分

path = "E:\\download\\cora\\cora\\"
cites = path + "cora.cites"
content = path + "cora.content"

# 索引字典,将原本的论文id转换到从0开始编码
index_dict = dict()
# 标签字典,将字符串标签转化为数值
label_to_index = dict()

features = []
labels = []
edge_index = []

with open(content,"r") as f:
    nodes = f.readlines()
    for node in nodes:
        node_info = node.split()
        index_dict[int(node_info[0])] = len(index_dict)
        features.append([int(i) for i in node_info[1:-1]])
        
        label_str = node_info[-1]
        if(label_str not in label_to_index.keys()):
            label_to_index[label_str] = len(label_to_index)
        labels.append(label_to_index[label_str])

with open(cites,"r") as f:
    edges = f.readlines()
    for edge in edges:
        start, end = edge.split()
        # 训练时将边视为无向的,但原本的边是有向的,因此需要正反添加两次
        edge_index.append([index_dict[int(start)],index_dict[int(end)]])
        edge_index.append([index_dict[int(end)],index_dict[int(start)]])

# 转换为Tensor
labels = torch.LongTensor(labels)
features = torch.FloatTensor(features)
# 行归一化
features = torch.nn.functional.normalize(features, p=1, dim=1)
edge_index =  torch.LongTensor(edge_index)

device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') # 本电脑只有一个GPU

mask = torch.randperm(len(index_dict)) # 随机打乱顺序
train_mask = mask[:140]
val_mask = mask[140:640]
test_mask = mask[1708:2708]


cora = Data(x = features, edge_index = edge_index.t().contiguous(), y = labels).to(device)

3.GCN模块

class GCNNet(torch.nn.Module):
    def __init__(self, num_feature, num_label):
        super(GCNNet,self).__init__()
        self.GCN1 = GCNConv(num_feature, 16)
        self.GCN2 = GCNConv(16, num_label)  
        self.dropout = torch.nn.Dropout(p=0.5)
        
    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        
        x = self.GCN1(x, edge_index)
        x = F.relu(x)
        x = self.dropout(x)
        x = self.GCN2(x, edge_index)
        
        return F.log_softmax(x, dim=1)


4.GAT模块

class GATNet(torch.nn.Module):
    def __init__(self, num_feature, num_label):
        super(GATNet,self).__init__()
        self.GAT1 = GATConv(num_feature, 8, heads = 8, concat = True, dropout = 0.6)
        self.GAT2 = GATConv(8*8, num_label, dropout = 0.6)  
        
    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        
        x = self.GAT1(x, edge_index)
        x = F.relu(x)
        x = self.GAT2(x, edge_index)
        
        return F.log_softmax(x, dim=1)


5.画图及显示模块

def gcn_apply():
    model = GCNNet(features.shape[1], len(label_to_index)).to(device)
    optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

    acc_record = []
    loss_record = []

    for epoch in range(500):
        optimizer.zero_grad()
        out = model(cora)
        loss = F.nll_loss(out[train_mask], cora.y[train_mask])
        loss_record.append(loss.item())
        print('epoch: %d loss: %.4f' %(epoch, loss))
        loss.backward()
        optimizer.step()
        
        # if((epoch + 1)% 10 == 0):
        model.eval()
        _, pred = model(cora).max(dim=1)
        correct = int(pred[test_mask].eq(cora.y[test_mask]).sum().item())
        acc = correct / len(test_mask)
        acc_record.append(acc)
        print('Accuracy: {:.4f}'.format(acc))
        model.train()
            


    ts = TSNE(n_components=2)
    ts.fit_transform(out[test_mask].to('cpu').detach().numpy())

    x = ts.embedding_
    y = cora.y[test_mask].to('cpu').detach().numpy()

    xi = []
    for i in range(7):
        xi.append(x[np.where(y==i)])

    colors = ['mediumblue','green','red','yellow','cyan','mediumvioletred','mediumspringgreen']
    plt.figure(figsize=(8, 6))
    for i in range(7):
        plt.scatter(xi[i][:,0],xi[i][:,1],s=30,color=colors[i],marker='+',alpha=1)
    plt.show()

    plt.figure(figsize=(14, 9))
    x = range(500)

    plt.plot(x,acc_record,label='acc')
    plt.plot(x,loss_record,label='loss')
    plt.legend()
    plt.grid()
    plt.show()


def gat_apply():
    seed = 1
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)  
    np.random.seed(seed)  # Numpy module.
    # random.seed(seed)  # Python random module.
    torch.manual_seed(seed)
    torch.backends.cudnn.benchmark = False
    torch.backends.cudnn.deterministic = True
    model = GATNet(features.shape[1], len(label_to_index)).to(device)

    optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

    acc_record = []
    loss_record = []


    for epoch in range(500):
        optimizer.zero_grad()
        out = model(cora)
        loss = F.nll_loss(out[train_mask], cora.y[train_mask])
        loss_record.append(loss.item())
        print('epoch: %d loss: %.4f' %(epoch, loss))
        loss.backward()
        optimizer.step()
        
        # if((epoch + 1)% 10 == 0):
        model.eval()
        _, pred = model(cora).max(dim=1)
        correct = int(pred[test_mask].eq(cora.y[test_mask]).sum().item())
        acc = correct / len(test_mask)
        acc_record.append(acc)
        print('Accuracy: {:.4f}'.format(acc))
        model.train()
            


    ts = TSNE(n_components=2)
    ts.fit_transform(out[test_mask].to('cpu').detach().numpy())

    x = ts.embedding_
    y = cora.y[test_mask].to('cpu').detach().numpy()

    xi = []
    for i in range(7):
        xi.append(x[np.where(y==i)])

    colors = ['mediumblue','green','red','yellow','cyan','mediumvioletred','mediumspringgreen']
    plt.figure(figsize=(8, 6))
    for i in range(7):
        plt.scatter(xi[i][:,0],xi[i][:,1],s=30,color=colors[i],marker='+',alpha=1)
    plt.show()

    plt.figure(figsize=(14, 9))
    x = range(500)

    plt.plot(x,acc_record,label='acc')
    plt.plot(x,loss_record,label='loss')
    plt.legend()
    plt.grid()
    plt.show()

6.主函数

if __name__ == "__main__":
    gcn_apply()
    gat_apply()

7.整个网络的代码

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
import pandas as pd
import torch
from torch._C import parse_ir
import torch_geometric
from torch_geometric import datasets
from torch_geometric.data import Data, InMemoryDataset
from torch_geometric.datasets import Planetoid
import torch.nn.functional as F
from torch_geometric.nn import GCNConv,GATConv # GCN
from sklearn.manifold import TSNE

path = "E:\\download\\cora\\cora\\"
cites = path + "cora.cites"
content = path + "cora.content"

# 索引字典,将原本的论文id转换到从0开始编码
index_dict = dict()
# 标签字典,将字符串标签转化为数值
label_to_index = dict()

features = []
labels = []
edge_index = []

with open(content,"r") as f:
    nodes = f.readlines()
    for node in nodes:
        node_info = node.split()
        index_dict[int(node_info[0])] = len(index_dict)
        features.append([int(i) for i in node_info[1:-1]])
        
        label_str = node_info[-1]
        if(label_str not in label_to_index.keys()):
            label_to_index[label_str] = len(label_to_index)
        labels.append(label_to_index[label_str])

with open(cites,"r") as f:
    edges = f.readlines()
    for edge in edges:
        start, end = edge.split()
        # 训练时将边视为无向的,但原本的边是有向的,因此需要正反添加两次
        edge_index.append([index_dict[int(start)],index_dict[int(end)]])
        edge_index.append([index_dict[int(end)],index_dict[int(start)]])


class GCNNet(torch.nn.Module):
    def __init__(self, num_feature, num_label):
        super(GCNNet,self).__init__()
        self.GCN1 = GCNConv(num_feature, 16)
        self.GCN2 = GCNConv(16, num_label)  
        self.dropout = torch.nn.Dropout(p=0.5)
        
    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        
        x = self.GCN1(x, edge_index)
        x = F.relu(x)
        x = self.dropout(x)
        x = self.GCN2(x, edge_index)
        
        return F.log_softmax(x, dim=1)


class GATNet(torch.nn.Module):
    def __init__(self, num_feature, num_label):
        super(GATNet,self).__init__()
        self.GAT1 = GATConv(num_feature, 8, heads = 8, concat = True, dropout = 0.6)
        self.GAT2 = GATConv(8*8, num_label, dropout = 0.6)  
        
    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        
        x = self.GAT1(x, edge_index)
        x = F.relu(x)
        x = self.GAT2(x, edge_index)
        
        return F.log_softmax(x, dim=1)


# 为每个节点增加自环,但后续GCN层默认会添加自环,跳过即可
# for i in range(2708):
#     edge_index.append([i,i])
  
# 转换为Tensor
labels = torch.LongTensor(labels)
features = torch.FloatTensor(features)
# 行归一化
features = torch.nn.functional.normalize(features, p=1, dim=1)
edge_index =  torch.LongTensor(edge_index)

device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') # 本电脑只有一个GPU

mask = torch.randperm(len(index_dict)) # 随机打乱顺序
train_mask = mask[:140]
val_mask = mask[140:640]
test_mask = mask[1708:2708]


cora = Data(x = features, edge_index = edge_index.t().contiguous(), y = labels).to(device)

def gcn_apply():
    model = GCNNet(features.shape[1], len(label_to_index)).to(device)
    optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

    acc_record = []
    loss_record = []

    for epoch in range(500):
        optimizer.zero_grad()
        out = model(cora)
        loss = F.nll_loss(out[train_mask], cora.y[train_mask])
        loss_record.append(loss.item())
        print('epoch: %d loss: %.4f' %(epoch, loss))
        loss.backward()
        optimizer.step()
        
        # if((epoch + 1)% 10 == 0):
        model.eval()
        _, pred = model(cora).max(dim=1)
        correct = int(pred[test_mask].eq(cora.y[test_mask]).sum().item())
        acc = correct / len(test_mask)
        acc_record.append(acc)
        print('Accuracy: {:.4f}'.format(acc))
        model.train()
            


    ts = TSNE(n_components=2)
    ts.fit_transform(out[test_mask].to('cpu').detach().numpy())

    x = ts.embedding_
    y = cora.y[test_mask].to('cpu').detach().numpy()

    xi = []
    for i in range(7):
        xi.append(x[np.where(y==i)])

    colors = ['mediumblue','green','red','yellow','cyan','mediumvioletred','mediumspringgreen']
    plt.figure(figsize=(8, 6))
    for i in range(7):
        plt.scatter(xi[i][:,0],xi[i][:,1],s=30,color=colors[i],marker='+',alpha=1)
    plt.show()

    plt.figure(figsize=(14, 9))
    x = range(500)

    plt.plot(x,acc_record,label='acc')
    plt.plot(x,loss_record,label='loss')
    plt.legend()
    plt.grid()
    plt.show()


def gat_apply():
    seed = 1
    torch.manual_seed(seed)
    torch.cuda.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)  
    np.random.seed(seed)  # Numpy module.
    # random.seed(seed)  # Python random module.
    torch.manual_seed(seed)
    torch.backends.cudnn.benchmark = False
    torch.backends.cudnn.deterministic = True
    model = GATNet(features.shape[1], len(label_to_index)).to(device)

    optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

    acc_record = []
    loss_record = []


    for epoch in range(500):
        optimizer.zero_grad()
        out = model(cora)
        loss = F.nll_loss(out[train_mask], cora.y[train_mask])
        loss_record.append(loss.item())
        print('epoch: %d loss: %.4f' %(epoch, loss))
        loss.backward()
        optimizer.step()
        
        # if((epoch + 1)% 10 == 0):
        model.eval()
        _, pred = model(cora).max(dim=1)
        correct = int(pred[test_mask].eq(cora.y[test_mask]).sum().item())
        acc = correct / len(test_mask)
        acc_record.append(acc)
        print('Accuracy: {:.4f}'.format(acc))
        model.train()
            


    ts = TSNE(n_components=2)
    ts.fit_transform(out[test_mask].to('cpu').detach().numpy())

    x = ts.embedding_
    y = cora.y[test_mask].to('cpu').detach().numpy()

    xi = []
    for i in range(7):
        xi.append(x[np.where(y==i)])

    colors = ['mediumblue','green','red','yellow','cyan','mediumvioletred','mediumspringgreen']
    plt.figure(figsize=(8, 6))
    for i in range(7):
        plt.scatter(xi[i][:,0],xi[i][:,1],s=30,color=colors[i],marker='+',alpha=1)
    plt.show()

    plt.figure(figsize=(14, 9))
    x = range(500)

    plt.plot(x,acc_record,label='acc')
    plt.plot(x,loss_record,label='loss')
    plt.legend()
    plt.grid()
    plt.show()

if __name__ == "__main__":
    gcn_apply()
    gat_apply()

8.相关图片

图片(1)程序运行截图
在这里插入图片描述
图片(2)GCN分类图
在这里插入图片描述
图片(3)GCN LOSS与ACC
在这里插入图片描述
图片(4)GAT分类可视化
在这里插入图片描述
图片(5)GAT LOSS与ACC
在这里插入图片描述

保姆级教程:用PyTorch Geometric从零搭建GCN和GAT,搞定Cora论文分类 本文提供了一份详细的PyTorch Geometric教程,从零开始构建GCN和GAT模型,并应用于Cora论文分类任务。通过环境准备、数据加载、模型构建、训练评估等步骤,帮助读者掌握图神经网络的核心技术。教程特别适合希望深入了解GNN实践的开发者,涵盖了节点分类的关键技巧和常见问题解决方案。 阅读详情

相关推荐

GCN vs GAT实战对比:在Cora数据集上,谁才是节点分类的王者?(附PyTorch Geometric代码)

本文对比了图卷积网络(GCN)和图注意力网络(GAT)在Cora数据集上的节点分类性能,提供了详细的PyTorch Geometric实现代码。实验结果显示,GAT在准确率上略胜一筹,但GCN在训练速度和资源消耗上更具优势。文章还给出了针对不同场景的技术选型建议和优化技巧,帮助开发者根据实际需求选择最合适的模型。

weixin_30505225的博客 414

[图神经网络]PyTorch简单实现一个GCN

图神经网络PyG实现

就随便写写.... 3744

Pytorch实现GCN(基于PyTorch实现)

本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代码实例都附带有完整的代码。

优快云 精品推荐 6943

如何使用pytorch写一个图卷积神经网络(GCN)

图卷积网络(Graph Convolutional Network,GCN)是近年来逐渐流行的一种神经网络结构,它能够处理具有广义拓扑图结构的数据,并深入发掘其特征和规律。图卷积网络的关键是学习一个函数,该函数通过聚合节点自身的特征及其邻居节点的特征来生成节点的表示。社交网络分析:图卷积网络可以应用于社交网络分析,用于识别社区结构、推荐好友、分析信息传播等。例如,通过构建用户交互图,图卷积网络可以学习用户的兴趣和偏好,从而为用户推荐相似兴趣的好友或内容。

mainzld的博客 2205

Pytorch实现GCN(基于Message Passing消息传递机制实现)

本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代码实例都附带有完整的代码。

优快云 精品推荐 6033

【深度学习常用算法】十二、图神经网络(GNN):从基础理论到GCN与GAT的全栈解析与实战

摘要:本文系统阐述图神经网络(GNN)的核心原理、关键变体及其在多领域的应用实践。作为处理图结构数据的专用深度学习模型,GNN通过聚合邻居节点信息实现图数据特征学习,在社交网络分析、分子结构预测、推荐系统等领域展现独特优势。文中深入解析图卷积网络(GCN)和图注意力网络(GAT)的算法机制,通过PyTorch Geometric实现完整模型训练与推理,在Cora引文网络和ZINC分子数据集上进行实验验证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1117

PyTorch深度学习实战:图神经网络

本文介绍了图神经网络(GNN)的基本概念与应用实践。课程内容涵盖图数据表示方法、图卷积网络(GCN)和图注意力网络(GAT)的原理实现,以及使用PyTorch Geometric进行优化。通过Cora(节点分类)和MUTAG(图分类)两个经典数据集,展示了GNN在不同层级任务(节点级、边级、图级)的应用方法。课程提供了完整的环境配置指南,包括PyTorch Lightning框架和NPU/CPU/MPS等多种计算设备的适配方案,旨在帮助学习者掌握GNN的核心技术及其在社交网络、知识图谱等领域的实际应用能力。

WSSWWWSSW的博客 878

图神经网络实战(8)——图注意力网络(Graph Attention Networks, GAT)

图注意力网络 (Graph Attention Networks, GAT) 是对图卷积网络 (Graph Convolutional Network, GCN) 的改进,提出了一种通过自注意力 (self-attention) 过程计算的加权因子,而不是使用静态的归一化系数。在本节中,我们介绍了 GAT 架构。通过从线性变换到多头注意力的四个主要步骤,了解了 GAT 的工作原理,并在 NumPy 中从零开始构建了 GAT 层。最后,将 GAT 模型应用于 Cora 和 CiteSeer 数据集。

盼小辉丶的博客 1万+

图神经网络完全指南:从零开始掌握GNN的核心原理与应用

图神经网络(GNN)是深度学习领域中专门处理图结构数据的强大工具,已广泛应用于社交网络分析、推荐系统、分子结构预测等多个领域。本指南将帮助你从零开始理解GNN的核心概念、工作原理及实际应用,即使没有深厚的数学背景也能轻松入门。 ## 一、什么是图神经网络? 图神经网络(Graph Neural Network, GNN)是一类专门设计用于处理图结构数据的神经网络模型。与传统的CNN和RNN不同

gitblog_00340的博客 766

GCN的pytorch实现

本代码可以纵观从数据load到GCN训练的全过程,是一份比较好的学习demo。 本代码参考自https://colab.research.google.com/drive/1mMUKnvM_Byu8wEcJpFSYGnniPPhIOD7N?usp=sharing。

Python 高级语法:闭包

闭包(Closure)是函数式编程中的一个重要概念。在Python中,闭包可以简单理解为:一种特殊的函数。外函数:嵌套函数中最外层的函数称之为外函数。内函数:嵌套函数中最内层的函数称之为内函数;内函数引用了外函数的临时变量;外函数的返回使用了临时变量的内函数。

moment159的博客 2354

第17篇:图神经网络(GNN):处理非欧几里得数据的利器

摘要:本文系统讲解图神经网络(GNN)的核心原理与应用,重点解析图卷积网络(GCN)的谱域/空域实现、图注意力网络(GAT)的注意力机制、图自编码器(GAE)与图生成方法。通过PyTorch Geometric(PyG)库,演示Cora引文网络的节点分类与链接预测实战。内容涵盖图数据特性、消息传递机制、GNN模型架构及前沿研究方向,帮助读者掌握处理社交网络、分子结构等非欧几里得数据的图学习方法,并附有完整代码实现与学习建议。

to do , to be . 1356

Scratch(四十一):升级版垃圾分类

哈喽,大家好!之前给大家展示过“Scratch(二十四):垃圾分类”。今天呢,给大家展示的Scratch是`升级版垃圾分类`。接下来,我们一起看一下效果吧。

我可以很大侠的博客 6868

DGL官方教程--图注意力网络(GAT)

Note: Click here to download the full example code Graph attention network Authors: Hao Zhang, Mufei Li , Minjie Wang Zheng Zhang 在本教程中,您将学习图注意力网络(GAT)以及如何在PyTorch中实现它。您还可以学习可视化并了解注意力机制所学到的知识。 图卷积网络...

weixin_45613751的博客 1万+

Altera Cyclone4 EP4CE15F17C8核心板硬件设计避坑指南(附AD09工程文件)

本文深入解析Altera Cyclone4 EP4CE15F17C8核心板硬件设计中的关键问题与解决方案,涵盖电源架构优化、信号完整性处理、热设计及生产调试要点。特别提供经过验证的AD09工程文件,帮助开发者规避常见设计陷阱,提升FPGA项目的成功率与可靠性。

weixin_29159441的博客 297

从入门到精通|Yalmip+Cplex在电力系统中的应用(Matlab代码实现)

​ 火电成本包括运行成本、碳捕集成本,其中火电运行成本由运行维护成 本和发电煤耗成本构成,发电煤耗与其出力关系: ,F 为机组煤耗量(kg/h),P 为机组出力/MW;运行维护成本按照 0.5 倍煤耗成本考虑,碳捕集成本取决于碳排放量及碳捕集单价,火电机组相关参数如附表 1 所示,电煤价格为 700 元/t ​

weixin_46039719的博客 1552

图神经网络进阶:图注意力网络(Graph Attention Networks, GAT)让邻居“说话”有轻重

计算分类准确率:预测正确的样本数 ÷ 总样本数。注意:此函数假设输入是一维张量(如argmax后的类别索引)。特性说明使用 GATv2Conv比原始 GAT 表达能力更强,能学习更复杂的注意力函数多头注意力(8 heads)提升模型容量和鲁棒性高比例 Dropout(0.6)应对小训练集过拟合问题端到端训练/验证/测试封装代码结构清晰,易于复用利用图结构(edge_index)通过注意力机制动态聚合邻居GCN 是“平均听邻居说话”,GAT 是“有选择地听重要的邻居说话”。通过引入注意力机制。

sweet_ran的博客 1900

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的生活垃圾检测与分类系统(Python+PySide6界面+训练代码)

随着城市化进程的加速和人口增长,生活垃圾管理已成为现代城市面临的重要挑战。传统的垃圾处理方法效率低下且成本高昂,急需智能化解决方案。本文详细介绍了基于YOLO系列算法(特别是YOLOv8)的智能生活垃圾检测与分类系统,该系统能够实时识别和分类多种生活垃圾,为智能垃圾处理和回收提供技术支持。系统包含完整的数据集构建、模型训练、评估和可视化界面,并提供了完整的实现代码。

YOLO 117

深入理解图注意力机制

图卷积网络Graph Convolutional Network (GCN) 告诉我们将局部的图结构和节点特征结合可以在节点分类任务中获得不错的表现。美中不足的是 GCN 结合邻近节点特征的方式和图的结构依依相关,这局限了训练所得模型在其他图结构上的泛化能力。 Graph Attention Network (GAT) 提出了用注意力机制对邻近节点特征加权求和。邻近节点特征的权重完全取决于节点...

zzx3163967592的博客 6647

Transformer 在自动驾驶中的应用:深度对比特斯拉(Tesla)、小鹏(XNet)、华为(ADS 2.0)在 Transformer 架构应用上的异同

自动驾驶汽车是当前人工智能和机器学习领域的热点研究方向之一。其核心技术之一就是基于深度学习的感知和决策系统。在感知系统中,目标检测和跟踪、语义分割、场景理解等计算机视觉任务至关重要。而在决策系统中,规划和控制模块需要对当前状态进行建模并做出相应的决策。近年来,Transformer模型在自然语言处理领域取得了突破性进展,并逐步被应用到计算机视觉等其他领域。相比于传统的卷积神经网络和循环神经网络,Transformer模型具有建模长距离依赖关系的能力,可以更好地捕捉输入序列中的全局信息。

AI天才研究院 864

从询价到回款:一篇讲透 SAP SD 销售与分销的实战入门指南

摘要: SAP SD(Sales and Distribution)模块是SAP ERP中管理销售与分销的核心组件,贯穿从订单到回款(Order-to-Cash)的全流程。其核心价值在于将销售业务结构化,通过主数据(客户、物料、定价)和交易单据(订单、交货、发票)实现流程可审计、可自动化。SD模块与物流(MM)、生产(PP)、财务(FI)深度集成,涵盖定价策略、信用控制、发运管理、国际贸易等复杂场景。关键设计包括条件技术(Condition Technique)实现灵活定价,单据流(Document Flo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 258

从零实现GCN与GAT:Cora数据集节点分类实战(PyTorch Geometric版)

本文详细介绍了如何使用PyTorch Geometric从零实现GCN与GAT模型,并在Cora数据集上完成节点分类任务。通过代码示例和实战技巧,帮助读者掌握图神经网络的核心原理与应用,包括数据加载、模型构建、训练优化及结果可视化等关键步骤,特别适合图神经网络初学者快速入门。

weixin_29056781的博客 410

[SoC]SoC验证中bootcode与firmware相关验证经验总结

本文总结了SoC验证中bootcode和firmware的验证经验。重点介绍了两种数据加载方法:1)使用Verilog系统函数$readmemh/$readmemb直接写入ROM/ARAM,需注意文件路径、格式和斜杠方向;2)通过Memory Hierarchy在initial块中操作,需要添加适当延时并注意路径拼接。文章还提供了在testcase phase中先读取数据到HASH再写入SRAM的示例,并强调加载后需使能edc_bypass以避免ECC错误。验证过程中需特别注意文件位置、格式要求及路径处理等

元直的博客 2498

图卷积神经网络快速入门:基于PyTorch的GCN模型完整指南

图卷积神经网络(GCN)是处理图结构数据的革命性技术,能够有效分析社交网络、推荐系统、生物信息学等复杂关系数据。本文将带你从零开始,快速掌握基于PyTorch的GCN实现,构建一个功能完善的图神经网络演示系统。🚀 ## 传统方法的局限性与GCN的突破 传统神经网络在处理规则数据(如图像、文本)方面表现出色,但当面对**图结构数据**时却显得力不从心。图数据具有非欧几里得特性,节点间的连接关系

gitblog_00814的博客 875

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PyTorch实战:手把手教你实现GAT图注意力网络(附完整代码)

本文详细介绍了如何使用PyTorch从零实现图注意力网络(GAT),深入解析了其核心的注意力机制与工程实现细节。通过对比GCN,阐述了GAT如何通过可学习的注意力权重动态聚合邻居信息,并提供了完整的代码示例、训练技巧以及在Cora等数据集上的实战应用,帮助读者掌握这一强大的图表示学习工具。

silver的专栏 1021

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

基于pytorch的GAT教程

本文的想法是让非研究人员也能更轻松地理解图注意力网络(以及通用的GNN)!在本文中,您将获得以下问题的答案:✅ GAT 到底是什么?✅ 如何加载和可视化Cora引文网络?✅ 我们如何训练GAT(Cora分类示例)?✅ 如何可视化不同GAT的属性?完成本课程后,您将对图神经网络有更好的理解!注意:在本笔记本中,我们将重点关注 Cora(传导法示例),如果需要可以查看其他笔记本中的PPI - 蛋白质相互作用数据集(归纳法)。很好,让我们开始吧!

GawainTky的博客 1144

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 复杂网络;社交网络;社区检测;节点重要性(重要节点识别);舆论动力学模型; 传染病模型 ;蓄意攻击 、随机攻击;网络鲁棒性、脆弱性、稳定性
下一篇: PyG|邻接矩阵转为coo_matrix格式
xiao黄
xiao黄 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄8年 1万+粉丝 250原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值