Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Cora图神经网络Pytorch

Cora图神经网络Pytorch

作者头像
Tom2Code
发布于 2024-02-01 04:37:47
发布于 2024-02-01 04:37:47
37200
代码可运行
举报
文章被收录于专栏:TomTom
运行总次数:0
代码可运行

最近搞到了datawhale的内部资料,学习的同时也来分享一波

首先在加载数据集的时候就报错了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/kimiyoung/planetoid/
raw/master/data/ind.cora.x进行下载Core数据集,
但是没有蹄 子打不开下载不了
出现“TimeoutError: [WinError 10060] 由于连接方
在一段时间后没有正确答复或连接的主机没有反应,连接
尝试失败。”这种错误。

所以我们需要手动的下载数据集,并且解压放到对应的文件夹下:

首先给大家先放上加载数据集的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch_geometric.datasets import Planetoid


import torch
from torch_geometric.nn import MessagePassing
from torch_geometric.utils import add_self_loops, degree

dataset = Planetoid(root='D:/data/', name='Cora')
print(dataset)

打印一下数据集的一些属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch_geometric.datasets import Planetoid


import torch
from torch_geometric.nn import MessagePassing
from torch_geometric.utils import add_self_loops, degree
from torch_geometric.transforms import NormalizeFeatures
dataset = Planetoid(root='D:/data/', name='Cora',transform=NormalizeFeatures())

print()
print(f"Dataset: {dataset}")
print("========")
print(f"Number of graphs:{len(dataset)}")
print(f"Number of features:{dataset.num_features}")
print(f'Number of classes: {dataset.num_classes}')

data = dataset[0] # Get the first graph object.

print()
print(data)
print('======================')

# Gather some statistics about the graph.
print(f'Number of nodes: {data.num_nodes}')
print(f'Number of edges: {data.num_edges}')
print(f'Average node degree: {data.num_edges /data.num_nodes:.2f}')

print(f'Number of training nodes: {data.train_mask.sum()}')
print(f'Training node label rate: {int(data.train_mask.sum()) /data.num_nodes:.2f}')
print(f'Contains isolated nodes:{data.contains_isolated_nodes()}')
print(f'Contains self-loops: {data.contains_self_loops()}')
print(f'Is undirected: {data.is_undirected()}')

输出结果:

学习资料中是这样介绍的:

然后使用一个简单的MLP神经网络来看看效果怎样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MLP(torch.nn.Module):
    def __init__(self, hidden_channels):
        super(MLP, self).__init__()
        torch.manual_seed(12345)
        self.lin1 = Linear(dataset.num_features, hidden_channels)
        self.lin2 = Linear(hidden_channels, dataset.num_classes)
    def forward(self, x):
        x = self.lin1(x)
        x = x.relu()
        x = F.dropout(x, p=0.5, training=self.training)
        x = self.lin2(x)
        return x


model = MLP(hidden_channels=16)
print(model)

model = MLP(hidden_channels=16)
criterion = torch.nn.CrossEntropyLoss() # Define loss criterion.
optimizer = torch.optim.Adam(model.parameters(), lr=0.01,weight_decay=5e-4) # Define optimizer.


def train():
    model.train()
    optimizer.zero_grad() # Clear gradients.
    out = model(data.x) # Perform a single forward pass.
    loss = criterion(out[data.train_mask],data.y[data.train_mask]) # Compute the loss solely based on the
    loss.backward() # Derive gradients.
    optimizer.step() # Update parameters based on gradients.
    return loss


for epoch in range(1, 201):
    loss = train()
    print(f'Epoch: {epoch:03d}, Loss: {loss:.4f}')


def test():
    model.eval()
    out = model(data.x)
    pred = out.argmax(dim=1) # Use the class with highest probability.
    test_correct = pred[data.test_mask] == data.y[data.test_mask]
    # Check against ground-truth labels.
    test_acc = int(test_correct.sum()) / int(data.test_mask.sum())
    # Derive ratio of correct predictions.
    return test_acc

输出:

正如我们看到的,效果很差,一个重要的原因就是有标签的节点数量过少,训练的时候会有一些过拟合

接下来我们介绍图卷积神经网络

然后开始构建我们的图神经网络:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch_geometric.nn import GCNConv
class GCN(torch.nn.Module):
    def __init__(self, hidden_channels):
        super(GCN, self).__init__()
        torch.manual_seed(12345)
        self.conv1 = GCNConv(dataset.num_features,
        hidden_channels)
        self.conv2 = GCNConv(hidden_channels, dataset.num_classes)
    def forward(self, x, edge_index):
        x = self.conv1(x, edge_index)
        x = x.relu()
        x = F.dropout(x, p=0.5, training=self.training)
        x = self.conv2(x, edge_index)
        return x
    

然后可视化由未经过训练的GCN图神经网络生成的节点表征:

通过visualize的函数处理,7维特征的节点被映射到2维的平面上,可以看到有点“同类节点群聚”的现象

接下来,构建我们的图神经网络:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch_geometric.nn import GCNConv
class GCN(torch.nn.Module):
    def __init__(self, hidden_channels):
        super(GCN, self).__init__()
        torch.manual_seed(12345)
        self.conv1 = GCNConv(dataset.num_features,
        hidden_channels)
        self.conv2 = GCNConv(hidden_channels, dataset.num_classes)
    def forward(self, x, edge_index):
        x = self.conv1(x, edge_index)
        x = x.relu()
        x = F.dropout(x, p=0.5, training=self.training)
        x = self.conv2(x, edge_index)
        return x

model = GCN(hidden_channels=16)
print("图神经网络:")
print(model)

model.eval()
out=model(data.x,data.edge_index)
visualize(out,color=data.y)


model = GCN(hidden_channels=16)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01,weight_decay=5e-4)
criterion = torch.nn.CrossEntropyLoss()
def train():
    model.train()
    optimizer.zero_grad() # Clear gradients.
    out = model(data.x, data.edge_index) # Perform a singleforward pass.
    loss = criterion(out[data.train_mask],
    data.y[data.train_mask]) # Compute the loss solely based on thetraining nodes.
    loss.backward() # Derive gradients.
    optimizer.step() # Update parameters based on gradients.
    return loss


for epoch in range(1, 201):
    loss = train()
    print(f'Epoch: {epoch:03d}, Loss: {loss:.4f}')

def test():
    model.eval()
    out=model(data.x,data.edge_index)
    pred=out.argmax(dim=1)
    test_correct=pred[data.test_mask]==data.y[data.test_mask]
    test_acc=int(test_correct.sum())/int(data.test_mask.sum())
    return test_acc

test_acc=test()
print(f"Test Accuracy:{test_acc:.4f}")

输出:

可以看到准确率已经提高到了80%,与前面获得59%的测准确率的MLP图神经网络相比,GCN图神经网络准确性要高的多,这表明节点的邻接信息再取得更好的准确率方面起着更关键的作用。

再来做个图看看吧:

通过上面这个图发现,同类节点群聚的现象更加明显了,这意味着在训练后,GCN图神经网络生成的节点表征质量更高了。

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

本文分享自 Tom的小院 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例(附代码)
来源:DeepHub IMBA本文约3800字,建议阅读7分钟本文使用pytorch-geometric实现的GNNExplainer作为示例。 深度学习模型的可解释性为其预测提供了人类可以理解的推理。如果不解释预测背后的原因,深度学习算法就像黑匣子,对于一些场景说是无法被信任的。不提供预测的原因也会阻止深度学习算法在涉及跨域公平、隐私和安全的关键应用程序中使用。 深度学习模型的可解释性有助于增加对模型预测的信任, 提高模型对与公平、隐私和其他安全挑战相关的关键决策应用程序的透明度,并且可以让我们了解网络特
数据派THU
2022/08/29
1.1K0
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例(附代码)
【机器学习】图神经网络:深度解析图神经网络的基本构成和原理以及关键技术
随着机器学习技术的迅猛发展,越来越多的数据类型得到了广泛的研究和应用。其中,图数据由于其能够表示复杂关系和结构的特点,逐渐成为研究的热点。然而,传统的机器学习和神经网络方法在处理图数据时往往力不从心,因为它们主要针对的是结构化数据(如表格数据)或序列数据(如文本和时间序列)。因此,如何高效地处理和分析图数据成为了一个重要的研究课题。
空白诗
2024/06/18
1.3K0
【机器学习】图神经网络:深度解析图神经网络的基本构成和原理以及关键技术
【机器学习】---深入探讨图神经网络(GNN)
图神经网络(Graph Neural Networks, GNNs)作为处理图结构数据的前沿工具,已在多个领域中展现出卓越的性能。本文将深入探讨GNN的基本原理、关键算法及其实现,提供更多代码示例,以帮助读者更好地理解和应用GNN。
Undoom
2024/09/29
2630
【机器学习】---深入探讨图神经网络(GNN)
智能运维新纪元:深度学习如何精准定位网络故障
大家好,我是Echo_Wish,今天咱们聊点实在的——运维人最头疼的网络故障管理。相信不少朋友都经历过突发事故,搞了一晚上还没找到问题根源,最后被领导问一句:“到底是哪里出了问题?” 真的是压力山大。
Echo_Wish
2025/05/11
760
智能运维新纪元:深度学习如何精准定位网络故障
【机器学习】使用Python实现图神经网络(GNN):图结构数据的分析与应用
在现代数据分析中,图数据因其能够自然地表示对象及其相互关系,越来越受到关注。图结构在许多实际应用中普遍存在,如社交网络中的用户关系、化学分子中的原子和键、生物信息学中的基因交互网络、交通系统中的道路和交叉口等。传统的数据分析方法在处理这些复杂的图结构数据时常常力不从心,难以充分挖掘其中的潜在信息。
空白诗
2024/06/22
1.8K0
【机器学习】使用Python实现图神经网络(GNN):图结构数据的分析与应用
图神经网络的表示方法和使用案例
由于图数据结构无处不在,图神经网络 (GNN) 越来越受欢迎。图使我们能够对科学领域中的许多不同问题进行建模,例如(但不限于)生物学、社会学、生态学、视觉、教育、经济学等。此外,图表示使我们能够处理大规模的非结构化数据。
deephub
2021/09/15
1.2K0
图神经网络的表示方法和使用案例
【机器学习】探索图神经网络 (GNNs): 揭秘图结构数据处理的未来
图结构数据在现实世界中无处不在,从社交网络中的用户关系,到推荐系统中的用户-物品交互,再到生物信息学中的分子结构。传统的机器学习模型在处理这些数据时常常力不从心,而图神经网络 (GNNs) 的出现,为这一难题提供了强有力的解决方案,GNNs 能够高效处理图结构数据,广泛应用于社交网络分析、推荐系统和生物信息学等领域。本文将深入探讨 GNNs 的基本原理及其在各个领域的应用,并提供代码示例来帮助理解。
2的n次方
2024/10/15
4120
【机器学习】探索图神经网络 (GNNs): 揭秘图结构数据处理的未来
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例
深度学习模型的可解释性为其预测提供了人类可以理解的推理。如果不解释预测背后的原因,深度学习算法就像黑匣子,对于一些场景说是无法被信任的。不提供预测的原因也会阻止深度学习算法在涉及跨域公平、隐私和安全的关键应用程序中使用。
deephub
2022/11/11
1.6K1
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例
图神经网络入门示例:使用PyTorch Geometric 进行节点分类
基于图的神经网络是强大的模型,可以学习网络中的复杂模式。在本文中,我们将介绍如何为同构图数据构造PyTorch Data对象,然后训练不同类型的神经网络来预测节点所属的类。这种类型的预测问题通常被称为节点分类。
deephub
2024/05/20
4820
图神经网络入门示例:使用PyTorch Geometric 进行节点分类
一文带你搞懂图神经网络GNN
先说一下今天用到的数据集,虽然之前有文章讲过,但是这次可以讲的更透彻一些,温故而知新嘛:
Tom2Code
2024/07/19
2780
一文带你搞懂图神经网络GNN
使用PyG进行图神经网络的节点分类、链路预测和异常检测
图神经网络(Graph Neural Networks)是一种针对图结构数据(如社交图、网络安全网络或分子表示)设计的机器学习算法。它在过去几年里发展迅速,被用于许多不同的应用程序。在这篇文章中我们将回顾GNN的基础知识,然后使用Pytorch Geometric解决一些常见的主要问题,并讨论一些算法和代码的细节。
deephub
2022/11/11
2.7K0
使用PyG进行图神经网络的节点分类、链路预测和异常检测
PyG搭建GCN实现节点分类
一开始是打算手写一下GCN,毕竟原理也不是很难,但想了想还是直接调包吧。在使用各种深度学习框架时我们首先需要知道的是框架内的数据结构,因此这篇文章分为两个部分:第一部分数据处理,主要讲解PyG中的数据结构,第二部分模型搭建。
Cyril-KI
2022/11/09
1.6K0
PyG搭建GCN实现节点分类
【教程】PyG入门,初步尝试运行第一行GNN代码
        最近,图的深度学习已经成为深度学习界最热门的研究领域之一。在这里,图神经网络(GNNs)旨在将经典的深度学习概念推广到不规则的结构化数据(与图像或文本相反),并使神经网络能够推理对象及其关系。
小锋学长生活大爆炸
2023/03/20
1.6K0
【教程】PyG入门,初步尝试运行第一行GNN代码
支持异构图、集成GraphGym,超好用的图神经网络库PyG更新2.0版本
机器之心报道 编辑:陈萍、杜伟 当前最流行和广泛使用的 GNN 库 PyG(PyTorch Geometric)现在出 2.0 版本了,新版本提供了全面的异构图支持、GraphGam 以及很多其他特性,这一系列改进,为使用者带来了更好的用户体验。 PyTorch Geometric(PyG)是一个构建于 PyTorch 之上的库,用来为一系列与结构化数据相关的应用编写和训练图神经网络(GNN)。PyG 对机器学习研究者以及机器学习工具包的首次使用者都很友好。 就其特征和功能而言,PyG 具有易用和统一的
机器之心
2023/03/29
7680
支持异构图、集成GraphGym,超好用的图神经网络库PyG更新2.0版本
使用 PyTorch Geometric 在 Cora 数据集上训练图卷积网络GCN
图结构在现实世界中随处可见。道路、社交网络、分子结构都可以使用图来表示。图是我们拥有的最重要的数据结构之一。
deephub
2021/12/28
2.1K0
使用 PyTorch Geometric 在 Cora 数据集上训练图卷积网络GCN
图神经网络框架-PyTorch Geometric(PyG)的使用及踩坑
地址|https://zhuanlan.zhihu.com/p/429964726
一点人工一点智能
2022/12/27
4.7K0
图神经网络框架-PyTorch Geometric(PyG)的使用及踩坑
图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比
Kolmogorov Arnold Networks (KAN)最近作为MLP的替代而流行起来,KANs使用Kolmogorov-Arnold表示定理的属性,该定理允许神经网络的激活函数在边缘上执行,这使得激活函数“可学习”并改进它们。
deephub
2024/07/02
7000
图神经网络版本的Kolmogorov Arnold(KAN)代码实现和效果对比
图神经网络:分子可溶性预测
也是torch_geometric自带的一个数据集,专门用于图神经网络入门的开胃小菜。
Tom2Code
2024/01/10
3740
图神经网络:分子可溶性预测
【教程】使用 Captum 解释 GNN 模型预测
        在本教程中,我们演示了如何将特征归属方法应用于图。具体来说,我们试图找到对每个实例预测最重要的边。
小锋学长生活大爆炸
2023/03/24
1K0
【教程】使用 Captum 解释 GNN 模型预测
【论文复现】图神经网络长对话理解
情感识别是对话理解中的一个核心挑战,特别是在处理包含语言、声音和面部表情等多模态数据的情况下。为应对这一挑战,一种常见的做法是利用全局和局部上下文信息来为每个对话中的句子(或话语)预测情感标签。全局信息通常通过对话级别的跨模态交互建模来获取,而局部信息则往往基于发言者的时间顺序或情感变化来推断,但这种方式往往忽视了话语级别的重要线索。此外,现有的大多数方法倾向于将多模态特征融合为统一的输入,而忽视了模态特有的表示。
Eternity._
2024/11/30
1110
【论文复现】图神经网络长对话理解
推荐阅读
相关推荐
图神经网络的可解释性方法介绍和GNNExplainer解释预测的代码示例(附代码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验