Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比

图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比

作者头像
deephub
发布于 2024-07-02 04:27:38
发布于 2024-07-02 04:27:38
72204
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:4
代码可运行

Kolmogorov Arnold Networks (KAN)最近作为MLP的替代而流行起来,KANs使用Kolmogorov-Arnold表示定理的属性,该定理允许神经网络的激活函数在边缘上执行,这使得激活函数“可学习”并改进它们。

目前我们看到有很多使用KAN替代MLP的实验,但是目前来说对于图神经网络来说还没有类似的实验,今天我们就来使用KAN创建一个图神经网络Graph Kolmogorov Arnold(GKAN),来测试下KAN是否可以在图神经网络方面有所作为。

数据集

我们将使用Planetoid数据集中的Cora,这个数据集是Planetoid御三家之一,学习图神经网络都会接触到。Cora数据集包含2708个节点,5429条边。标签共7个类别。数据集的特征维度是1433维,官网的可视化图如下:

我们这里使用pyg,因为它里面包含了完整的数据集加载代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # Import necessary libraries for the project
 import torch
 import torch.nn as nn
 import torch.nn.functional as F
 import numpy as np
 import random
 import gc
 
 # Import PyTorch Geometric libraries
 import torch_geometric.transforms as T
 from torch_geometric.utils import *
 from torch_geometric.datasets import Planetoid

GKAN

首先声明GKAN类,它是一个图神经网络,用于捕获图数据集中的复杂模式。模型将计算Cora图数据集之间的关系,并训练节点分类模型。由于Cora数据集中的节点代表学术论文,边缘代表引用,因此该模型将根据论文引用检测到的模式对学术论文进行分组。

代码中最主要的是NaiveFourierKANLayer层。每个NaiveFourierKANLayer对特征进行傅里叶变换,捕获数据中的复杂模式,同时改进NaiveFourierKANLayer中的激活函数。序列中的最后一层是一个标准的线性层,它将隐藏的特征映射到由hidden_feat和out_feat定义的输出特征空间,降低特征的维数,使分类更容易。

在最后一个KAN层之后,线性层对特征进行处理以产生输出特征。结果输出使用log-softmax激活函数原始输出分数转换为用于分类的概率。

通过整合傅里叶变换,模型通过捕获数据中的高频成分和复杂模式而成为真正的KAN,同时使用基于傅里叶的转换,该转换是可学习的,并随着模型的训练而改进。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 class GKAN(torch.nn.Module):
     def __init__(self, in_feat, hidden_feat, out_feat, grid_feat, num_layers, use_bias=False):
         super().__init__()
         self.num_layers = num_layers
         self.lin_in = nn.Linear(in_feat, hidden_feat, bias=use_bias)
         self.lins = torch.nn.ModuleList()
         for i in range(num_layers):
             self.lins.append(NaiveFourierKANLayer(hidden_feat, hidden_feat, grid_feat, addbias=use_bias))
         self.lins.append(nn.Linear(hidden_feat, out_feat, bias=False))
 
     def forward(self, x, adj):
         x = self.lin_in(x)
         for layer in self.lins[:self.num_layers - 1]:
             x = layer(spmm(adj, x))
         x = self.lins[-1](x)
         return x.log_softmax(dim=-1)

NaiveFourierKANLayer类实现了一个自定义的神经网络层,使用傅里叶特征(模型中的正弦和余弦变换是“激活函数”)来转换输入数据,增强模型捕获复杂模式的能力。

init方法初始化关键参数,包括输入和输出尺寸,网格大小和可选的偏差项。gridsize影响输入数据转换成其傅立叶分量的精细程度,从而影响转换的细节和分辨率。

forward方法中,输入张量x被重塑为二维张量。创建频率k的网格,重塑的输入xrshp用于计算余弦和正弦变换,以找到输入数据中的模式,从而产生两个张量c和s,表示输入的傅里叶特征。然后将这些张量连接并重塑以匹配后面计算需要的维度。

einsum函数用于在连接的傅立叶特征和傅立叶系数之间执行广义矩阵乘法,产生转换后的输出y。einsum函数中使用的字符串“dbik,djik->bj”是一个指示如何运行矩阵乘法的einsum字符串(在本例中为一般矩阵乘法)。矩阵乘法通过将变换后的输入数据投影到由傅里叶系数定义的新特征空间中,将输入数据的正弦和余弦变换组合成邻接矩阵。

fouriercoeffs参数是一个可学习的傅立叶系数张量,初始化为正态分布,并根据输入维度和网格大小进行缩放。傅里叶系数作为可调节的权重,决定了每个傅里叶分量对最终输出的影响程度,作为使该模型中的激活函数“可学习”的分量。在NaiveFourierKANLayer中,fouriercoeffs被列为参数,因此优化器将改进该变量。

最后,使用输出特征大小将输出y重塑回其原始维度并返回。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 class NaiveFourierKANLayer(nn.Module):
     def __init__(self, inputdim, outdim, gridsize=300, addbias=True):
         super(NaiveFourierKANLayer, self).__init__()
         self.gridsize = gridsize
         self.addbias = addbias
         self.inputdim = inputdim
         self.outdim = outdim
 
         self.fouriercoeffs = nn.Parameter(torch.randn(2, outdim, inputdim, gridsize) /
                                           (np.sqrt(inputdim) * np.sqrt(self.gridsize)))
         if self.addbias:
             self.bias = nn.Parameter(torch.zeros(1, outdim))
 
     def forward(self, x):
         xshp = x.shape
         outshape = xshp[0:-1] + (self.outdim,)
         x = x.view(-1, self.inputdim)
         k = torch.reshape(torch.arange(1, self.gridsize + 1, device=x.device), (1, 1, 1, self.gridsize))
         xrshp = x.view(x.shape[0], 1, x.shape[1], 1)
         c = torch.cos(k * xrshp)
         s = torch.sin(k * xrshp)
         c = torch.reshape(c, (1, x.shape[0], x.shape[1], self.gridsize))
         s = torch.reshape(s, (1, x.shape[0], x.shape[1], self.gridsize))
         y = torch.einsum("dbik,djik->bj", torch.concat([c, s], axis=0), self.fouriercoeffs)
         if self.addbias:
             y += self.bias
         y = y.view(outshape)
         return y

训练代码

train函数训练神经网络模型。它基于输入特征(feat)和邻接矩阵(adj)计算预测(out),使用标记数据(label和mask)计算损失和精度,使用反向传播更新模型的参数,并返回精度和损失值。

eval函数对训练好的模型求值。它在不更新模型的情况下计算输入特征和邻接矩阵的预测(pred),并返回预测的类标签。

Args类定义了各种配置参数,如文件路径,数据集名称,日志路径,辍学率,隐藏层大小,傅立叶基函数的大小,模型中的层数,训练轮数,早期停止标准,随机种子和学习率,等等

最后还有设置函数index_to_mask和random_disassortative_splits将数据集划分为训练、验证和测试数据,以便每个阶段捕获来自Cora数据集的各种各样的类。random_disassortative_splits函数通过变换每个类中的索引并确保每个集合的指定比例来划分数据集。然后使用index_to_mask函数将这些索引转换为布尔掩码,以便对原始数据集进行索引。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 def train(args, feat, adj, label, mask, model, optimizer):
     model.train()
     optimizer.zero_grad()
     out = model(feat, adj)
     pred, true = out[mask], label[mask]
     loss = F.nll_loss(pred, true)
     acc = int((pred.argmax(dim=-1) == true).sum()) / int(mask.sum())
     loss.backward()
     optimizer.step()
     return acc, loss.item()
 
 @torch.no_grad()
 def eval(args, feat, adj, model):
     model.eval()
     with torch.no_grad():
         pred = model(feat, adj)
     pred = pred.argmax(dim=-1)
     return pred
 
 class Args:
     path = './data/'
     name = 'Cora'
     logger_path = 'logger/esm'
     dropout = 0.0
     hidden_size = 256
     grid_size = 200
     n_layers = 2
     epochs = 1000
     early_stopping = 100
     seed = 42
     lr = 5e-4
 def index_to_mask(index, size):
     mask = torch.zeros(size, dtype=torch.bool, device=index.device)
     mask[index] = 1
     return mask
 
 def random_disassortative_splits(labels, num_classes, trn_percent=0.6, val_percent=0.2):
     labels, num_classes = labels.cpu(), num_classes.cpu().numpy()
     indices = []
     for i in range(num_classes):
         index = torch.nonzero((labels == i)).view(-1)
         index = index[torch.randperm(index.size(0))]
         indices.append(index)
 
     percls_trn = int(round(trn_percent * (labels.size()[0] / num_classes)))
     val_lb = int(round(val_percent * labels.size()[0]))
     train_index = torch.cat([i[:percls_trn] for i in indices], dim=0)
 
     rest_index = torch.cat([i[percls_trn:] for i in indices], dim=0)
     rest_index = rest_index[torch.randperm(rest_index.size(0))]
 
     train_mask = index_to_mask(train_index, size=labels.size()[0])
     val_mask = index_to_mask(rest_index[:val_lb], size=labels.size()[0])
     test_mask = index_to_mask(rest_index[val_lb:], size=labels.size()[0])
 
     return train_mask, val_mask, test_mask

训练流程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Args()
 
 args.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
 
 random.seed(args.seed)
 np.random.seed(args.seed)
 torch.manual_seed(args.seed)
 if torch.cuda.is_available():
     torch.cuda.manual_seed(args.seed)
     torch.cuda.manual_seed_all(args.seed)
 
 transform = T.Compose([T.NormalizeFeatures(), T.GCNNorm(), T.ToSparseTensor()])
 
 torch.cuda.empty_cache()
 gc.collect()
 
 
 dataset = Planetoid(args.path, args.name, transform=transform)[0]

这一步会自动下载数据集,结果如下:

运行模型。使用数据集特征,我们声明GKAN,使用Adam Optimizer,并使用random_disassortative_splits(我们编写的用于运行模型训练和评估的函数)拆分数据集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 in_feat = dataset.num_features
 out_feat = max(dataset.y) + 1
 
 model = KanGNN(
     in_feat=in_feat,
     hidden_feat=args.hidden_size,
     out_feat=out_feat,
     grid_feat=args.grid_size,
     num_layers=args.n_layers,
     use_bias=False,
 ).to(args.device)
 
 optimizer = torch.optim.Adam(model.parameters(), lr=args.lr)
 
 adj = dataset.adj_t.to(args.device)
 feat = dataset.x.float().to(args.device)
 label = dataset.y.to(args.device)
 
 trn_mask, val_mask, tst_mask = random_disassortative_splits(label, out_feat)
 trn_mask, val_mask, tst_mask = trn_mask.to(args.device), val_mask.to(args.device), tst_mask.to(args.device)
 torch.cuda.empty_cache()
 gc.collect()
 for epoch in range(args.epochs):
     trn_acc, trn_loss = train(args, feat, adj, label, trn_mask, model, optimizer)
     pred = eval(args, feat, adj, model)
     val_acc = int((pred[val_mask] == label[val_mask]).sum()) / int(val_mask.sum())
     tst_acc = int((pred[tst_mask] == label[tst_mask]).sum()) / int(tst_mask.sum())
 
     print(f'Epoch: {epoch:04d}, Trn_loss: {trn_loss:.4f}, Trn_acc: {trn_acc:.4f}, Val_acc: {val_acc:.4f}, Test_acc: {tst_acc:.4f}')

最终模型的准确率约为84%,这意味着它准确地预测了Cora数据集中84%的学术论文类别。

GCN和GAT

那么一般情况下GCN和GAT的准确率是多少呢?我们来做一个简单的实现

两层GCN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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)

两层GAT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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)

训练代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 model = GATNet(features.shape[1], len(label_to_index)).to(device)
 # model = GCNNet(features.shape[1], len(label_to_index)).to(device)
 
 optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
 
 for epoch in range(200):
     optimizer.zero_grad()
     out = model(cora)
     loss = F.nll_loss(out[train_mask], cora.y[train_mask])
     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)
         print('Accuracy: {:.4f}'.format(acc))
         model.train()

结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 epoch: 0 loss: 1.9512
 epoch: 1 loss: 1.7456
 epoch: 2 loss: 1.5565
 epoch: 3 loss: 1.3312
 epoch: 4 loss: 1.1655
 epoch: 5 loss: 0.9590
 epoch: 6 loss: 0.8127
 epoch: 7 loss: 0.7368
 epoch: 8 loss: 0.6223
 epoch: 9 loss: 0.6382
 Accuracy: 0.8180
 ...
 epoch: 190 loss: 0.4079
 epoch: 191 loss: 0.2836
 epoch: 192 loss: 0.3000
 epoch: 193 loss: 0.2390
 epoch: 194 loss: 0.2207
 epoch: 195 loss: 0.2316
 epoch: 196 loss: 0.2994
 epoch: 197 loss: 0.2480
 epoch: 198 loss: 0.2349
 epoch: 199 loss: 0.2657
 Accuracy: 0.8290

可以看到准确率大概为82%

我们最后还可以用t-SNE看看特征空间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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)

总结

可以看到,准确率有所提升,但是我们这里并没有做任何的优化,只是拿来直接使用了,所以这并不能证明KAN在实际应用中要强过GCN或者GAT,但是这个对比可以证明KAN是可以改进图神经网络的,所以如果你在进行图神经网络方面的研究,可以试试KAN,也许会有很好的效果。

本文的KAN代码参考自:

https://github.com/WillHua127/GraphKAN-Graph-Kolmogorov-Arnold-Networks

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文带你搞懂图神经网络GNN
先说一下今天用到的数据集,虽然之前有文章讲过,但是这次可以讲的更透彻一些,温故而知新嘛:
Tom2Code
2024/07/19
2920
一文带你搞懂图神经网络GNN
如何将tensorflow1.x代码改写为pytorch代码(以图注意力网络(GAT)为例)
之前讲解了图注意力网络的官方tensorflow版的实现,由于自己更了解pytorch,所以打算将其改写为pytorch版本的。
西西嘛呦
2020/09/16
2.2K0
如何将tensorflow1.x代码改写为pytorch代码(以图注意力网络(GAT)为例)
知识扩展---图神经网络GraphSAGE用于空间转录组的分子聚类
聚合通过神经网络来实现。在定义的forward函数中,输入neighbor_feature表示需要聚合的邻居节点的特征,它的维度为 Nsrc × Nneighbor × Din​,其中 Nsrc​表示源节点的数量, Nneighbor​表示邻居节点的数量, Din​​表示输入特征的维度。将这些邻居节点的特征通过一个线性变换得到隐藏层特征,进而进行求和、均值、最大值等聚合操作,得到Nsrc × Nneighbor × Din​​维的输出。
追风少年i
2025/02/05
1980
知识扩展---图神经网络GraphSAGE用于空间转录组的分子聚类
【机器学习】图神经网络:深度解析图神经网络的基本构成和原理以及关键技术
随着机器学习技术的迅猛发展,越来越多的数据类型得到了广泛的研究和应用。其中,图数据由于其能够表示复杂关系和结构的特点,逐渐成为研究的热点。然而,传统的机器学习和神经网络方法在处理图数据时往往力不从心,因为它们主要针对的是结构化数据(如表格数据)或序列数据(如文本和时间序列)。因此,如何高效地处理和分析图数据成为了一个重要的研究课题。
空白诗
2024/06/18
1.4K0
【机器学习】图神经网络:深度解析图神经网络的基本构成和原理以及关键技术
使用PyG进行图神经网络的节点分类、链路预测和异常检测
图神经网络(Graph Neural Networks)是一种针对图结构数据(如社交图、网络安全网络或分子表示)设计的机器学习算法。它在过去几年里发展迅速,被用于许多不同的应用程序。在这篇文章中我们将回顾GNN的基础知识,然后使用Pytorch Geometric解决一些常见的主要问题,并讨论一些算法和代码的细节。
deephub
2022/11/11
2.7K0
使用PyG进行图神经网络的节点分类、链路预测和异常检测
Cora图神经网络Pytorch
正如我们看到的,效果很差,一个重要的原因就是有标签的节点数量过少,训练的时候会有一些过拟合
Tom2Code
2024/02/01
3790
Cora图神经网络Pytorch
A股实践 :图神经网络与新闻共现矩阵策略(附代码)
量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,荣获2021年度AMMA优秀品牌力、优秀洞察力大奖,连续2年被腾讯云+社区评选为“年度最佳作者”。 量化投资与机器学习公众号独家撰写 感谢ChinaScope对本文提供数据支持 核心观点 本文在Qlib已实现的图神经网络模型GATs上进行改进,引入以基于数库SmarTag新闻分析数据的共现矩阵作为显性图关系; 实证
量化投资与机器学习微信公众号
2022/04/13
2.1K0
A股实践 :图神经网络与新闻共现矩阵策略(附代码)
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例
深度学习模型的可解释性为其预测提供了人类可以理解的推理。如果不解释预测背后的原因,深度学习算法就像黑匣子,对于一些场景说是无法被信任的。不提供预测的原因也会阻止深度学习算法在涉及跨域公平、隐私和安全的关键应用程序中使用。
deephub
2022/11/11
1.6K1
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例(附代码)
来源:DeepHub IMBA本文约3800字,建议阅读7分钟本文使用pytorch-geometric实现的GNNExplainer作为示例。 深度学习模型的可解释性为其预测提供了人类可以理解的推理。如果不解释预测背后的原因,深度学习算法就像黑匣子,对于一些场景说是无法被信任的。不提供预测的原因也会阻止深度学习算法在涉及跨域公平、隐私和安全的关键应用程序中使用。 深度学习模型的可解释性有助于增加对模型预测的信任, 提高模型对与公平、隐私和其他安全挑战相关的关键决策应用程序的透明度,并且可以让我们了解网络特
数据派THU
2022/08/29
1.1K0
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例(附代码)
图卷积网络(GCN)python实现
由cora.content和cora.cities文件构成。共2708个样本,每个样本的特征维度是1433。
西西嘛呦
2020/08/26
2.8K0
图卷积网络(GCN)python实现
图神经网络入门示例:使用PyTorch Geometric 进行节点分类
基于图的神经网络是强大的模型,可以学习网络中的复杂模式。在本文中,我们将介绍如何为同构图数据构造PyTorch Data对象,然后训练不同类型的神经网络来预测节点所属的类。这种类型的预测问题通常被称为节点分类。
deephub
2024/05/20
5000
图神经网络入门示例:使用PyTorch Geometric 进行节点分类
graphSAGE的python实现
https://github.com/FighterLYL/GraphNeuralNetwork
西西嘛呦
2020/08/26
1K0
PyG搭建GCN实现节点分类
一开始是打算手写一下GCN,毕竟原理也不是很难,但想了想还是直接调包吧。在使用各种深度学习框架时我们首先需要知道的是框架内的数据结构,因此这篇文章分为两个部分:第一部分数据处理,主要讲解PyG中的数据结构,第二部分模型搭建。
Cyril-KI
2022/11/09
1.6K0
PyG搭建GCN实现节点分类
使用 PyTorch Geometric 在 Cora 数据集上训练图卷积网络GCN
图结构在现实世界中随处可见。道路、社交网络、分子结构都可以使用图来表示。图是我们拥有的最重要的数据结构之一。
deephub
2021/12/28
2.1K0
使用 PyTorch Geometric 在 Cora 数据集上训练图卷积网络GCN
图深度学习入门教程(七)——残差多层图注意力模型
深度学习还没学完,怎么图深度学习又来了?别怕,这里有份系统教程,可以将0基础的你直接送到图深度学习。还会定期更新哦。
代码医生工作室
2020/05/09
3.1K0
图深度学习入门教程(七)——残差多层图注意力模型
机器学习——图神经网络
图神经网络(Graph Neural Network, GNN)是近年来机器学习领域的热门话题。GNN 以图结构数据为核心,能够高效地捕捉节点和边的复杂关系,广泛应用于社交网络、推荐系统、生物信息学等领域。本文将深入探讨图神经网络的基本概念、主要模型及其应用,并通过代码示例展示如何从头实现一个 GNN。
hope kc
2024/10/20
1.8K0
【机器学习】探索图神经网络 (GNNs): 揭秘图结构数据处理的未来
图结构数据在现实世界中无处不在,从社交网络中的用户关系,到推荐系统中的用户-物品交互,再到生物信息学中的分子结构。传统的机器学习模型在处理这些数据时常常力不从心,而图神经网络 (GNNs) 的出现,为这一难题提供了强有力的解决方案,GNNs 能够高效处理图结构数据,广泛应用于社交网络分析、推荐系统和生物信息学等领域。本文将深入探讨 GNNs 的基本原理及其在各个领域的应用,并提供代码示例来帮助理解。
2的n次方
2024/10/15
4370
【机器学习】探索图神经网络 (GNNs): 揭秘图结构数据处理的未来
【机器学习】---深入探讨图神经网络(GNN)
图神经网络(Graph Neural Networks, GNNs)作为处理图结构数据的前沿工具,已在多个领域中展现出卓越的性能。本文将深入探讨GNN的基本原理、关键算法及其实现,提供更多代码示例,以帮助读者更好地理解和应用GNN。
Undoom
2024/09/29
2760
【机器学习】---深入探讨图神经网络(GNN)
基于pytorch_pytorch handbook
代码来源 少量中文注解 纯学习https://github.com/joosthub/PyTorchNLPBook/blob/master/chapters/chapter_5/5_2_CBOW/5_2_Continuous_Bag_of_Words_CBOW.ipynb
全栈程序员站长
2022/10/02
6090
图卷积神经网络入门实战
Multi-layer Graph Convolutional Network (GCN) with first-order filters,来源:http://tkipf.github.io/graph-convolutional-networks/
YoungTimes
2022/04/28
8020
图卷积神经网络入门实战
推荐阅读
相关推荐
一文带你搞懂图神经网络GNN
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验