iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >PyG搭建GCN需要准备的数据格式
  • 421
分享到

PyG搭建GCN需要准备的数据格式

2024-04-02 19:04:59 421人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1. PyG数据集2. 构造数据集前言 有关GCN的原理可以参考:GCN图卷积神经网络原理 一开始是打算手写一下GCN,毕竟原理也不是很难,但想了想还是直接调包吧。在使用各种

前言

有关GCN的原理可以参考:GCN图卷积神经网络原理

一开始是打算手写一下GCN,毕竟原理也不是很难,但想了想还是直接调包吧。在使用各种深度学习框架时我们首先需要知道的是框架内的数据集结构,因此这篇文章主要讲讲PyG中的数据结构

1. PyG数据集

原始论文中使用的数据集:

本篇文章使用Citeseer网络。Citeseer网络是一个引文网络,节点为论文,一共3327篇论文。论文一共分为六类:Agents、ai人工智能)、DB(数据库)、IR(信息检索)、ML(机器语言)和HCI。如果两篇论文间存在引用关系,那么它们之间就存在链接关系。

使用PyG加载数据集:

data = Planetoid(root='/data/CiteSeer', name='CiteSeer')
print(len(data))

输出:

1

CiteSeer中只有一个网络,然后我们输出一下这个网络:

data = data[0]
print(data)
print(data.is_directed())

输出:

Data(x=[3327, 3703], edge_index=[2, 9104], y=[3327], train_mask=[3327], val_mask=[3327], test_mask=[3327])
False

x=[3327, 3703]。表示一共有3327个节点,然后节点的特征维度为3703,这里实际上是去除停用词和在文档中出现频率小于10次的词,整理得到3703个唯一词。

edge_index=[2, 9104],表示一共9104条edge。数据一共两行,每一行都表示节点编号。

输出一下data.y:

tensor([3, 1, 5, ..., 3, 1, 5])tensor([3, 1, 5,  ..., 3, 1, 5])

data.y表示节点的标签编号,比如3表示该篇论文属于第3类。

输出data.train_mask:

tensor([ True, True, True, ..., False, False, False])

data.train_mask的长度和y的长度一致,如果某个位置为True就表示该样本为训练样本。val_mask和test_mask类似,分别表示验证集和训练集。

比如我们输出:

print(data.y[data.test_mask])

结果为:

tensor([4, 5, 4, 4, 4, 1, 4, 2, 3, 3, 3, 3, 2, 3, 3, 4, 2, 0, 1, 2, 0, 3, 3, 4,
        2, 4, 0, 4, 3, 3, 3, 5, 4, 5, 4, 5, 1, 1, 3, 3, 3, 3, 3, 1, 2, 3, 3, 3,
        1, 2, 2, 3, 3, 1, 5, 5, 5, 3, 2, 3, 3, 3, 3, 3, 3, 3, 5, 1, 3, 1, 1, 4,
        1, 3, 3, 1, 3, 3, 2, 4, 3, 3, 3, 1, 2, 2, 2, 3, 5, 2, 1, 3, 2, 2, 2, 4,
        3, 3, 4, 0, 3, 1, 2, 2, 2, 2, 3, 2, 2, 2, 1, 1, 5, 2, 2, 1, 2, 4, 3, 1,
        1, 3, 2, 3, 4, 3, 3, 4, 4, 3, 2, 2, 1, 3, 4, 4, 4, 4, 4, 4, 5, 0, 3, 1,
        1, 3, 1, 3, 1, 3, 4, 4, 3, 2, 3, 5, 3, 3, 3, 4, 2, 2, 2, 5, 3, 1, 0, 3,
        2, 5, 2, 3, 2, 4, 2, 2, 2, 0, 5, 1, 3, 4, 4, 4, 1, 1, 5, 1, 2, 0, 1, 0,
        2, 2, 3, 3, 3, 3, 5, 4, 4, 3, 1, 1, 2, 1, 2, 2, 2, 2, 5, 0, 1, 2, 2, 4,
        0, 4, 1, 1, 2, 3, 1, 1, 2, 3, 3, 5, 2, 5, 5, 3, 1, 0, 5, 5, 5, 5, 3, 3,
        3, 0, 4, 5, 3, 4, 5, 4, 5, 2, 0, 5, 5, 5, 1, 1, 3, 1, 2, 2, 2, 3, 2, 4,
        5, 3, 3, 1, 3, 1, 2, 2, 1, 3, 1, 3, 1, 2, 1, 2, 1, 2, 2, 2, 2, 5, 4, 4,
        5, 0, 3, 4, 5, 4, 4, 4, 4, 4, 0, 0, 1, 4, 1, 1, 5, 0, 2, 2, 3, 3, 2, 2,
        0, 0, 3, 2, 4, 1, 1, 0, 0, 1, 2, 2, 2, 2, 2, 0, 4, 0, 1, 4, 1, 1, 2, 2,
        3, 3, 1, 3, 2, 4, 4, 0, 0, 3, 4, 4, 2, 2, 2, 5, 5, 2, 5, 5, 5, 5, 4, 0,
        2, 2, 0, 2, 4, 5, 4, 0, 3, 3, 5, 3, 3, 4, 2, 1, 5, 5, 0, 1, 3, 3, 3, 5,
        3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 0, 2, 2, 2, 2, 4, 3, 3,
        5, 5, 4, 5, 2, 4, 4, 4, 5, 5, 4, 2, 2, 3, 3, 4, 4, 3, 1, 3, 2, 0, 5, 5,
        5, 3, 4, 1, 4, 0, 5, 5, 0, 3, 0, 2, 3, 5, 3, 4, 2, 2, 3, 5, 1, 5, 3, 4,
        5, 5, 2, 2, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 0, 0, 5, 1, 2, 3, 3, 1, 3,
        2, 4, 3, 1, 3, 3, 3, 3, 3, 1, 0, 5, 4, 4, 1, 1, 3, 4, 4, 4, 4, 5, 4, 2,
        2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 1, 4, 0, 1, 4, 4, 4, 1, 2, 1, 5, 5, 2, 4,
        4, 2, 2, 3, 1, 1, 0, 0, 2, 1, 0, 1, 5, 1, 2, 2, 3, 2, 0, 0, 3, 3, 3, 2,
        2, 2, 1, 1, 1, 3, 3, 3, 5, 3, 5, 2, 3, 2, 3, 1, 5, 2, 2, 3, 3, 3, 1, 1,
        1, 3, 3, 3, 3, 4, 4, 1, 4, 4, 1, 3, 3, 1, 0, 3, 5, 4, 4, 2, 4, 1, 0, 3,
        1, 4, 1, 4, 4, 0, 5, 3, 2, 2, 2, 5, 5, 0, 4, 4, 1, 2, 2, 3, 3, 3, 5, 5,
        5, 1, 5, 1, 4, 3, 1, 5, 5, 4, 4, 2, 3, 1, 0, 0, 5, 3, 1, 2, 1, 4, 1, 4,
        1, 2, 2, 5, 1, 2, 1, 4, 5, 5, 1, 4, 5, 5, 1, 1, 5, 5, 3, 1, 0, 0, 1, 0,
        0, 2, 0, 4, 3, 4, 3, 3, 1, 2, 3, 5, 3, 5, 5, 5, 5, 5, 3, 4, 4, 5, 4, 2,
        2, 5, 1, 4, 4, 4, 3, 1, 5, 3, 1, 3, 4, 2, 2, 4, 2, 1, 5, 2, 2, 5, 5, 3,
        3, 4, 1, 1, 2, 5, 3, 4, 4, 4, 5, 5, 1, 5, 5, 1, 5, 5, 1, 1, 1, 4, 2, 3,
        5, 4, 1, 1, 4, 5, 2, 3, 1, 2, 1, 4, 1, 4, 1, 1, 1, 0, 0, 1, 5, 0, 2, 1,
        1, 5, 1, 1, 3, 2, 3, 3, 1, 1, 2, 3, 2, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3,
        3, 5, 2, 2, 3, 4, 4, 4, 4, 0, 3, 0, 3, 4, 1, 1, 3, 3, 0, 4, 5, 0, 0, 0,
        2, 1, 3, 4, 5, 2, 1, 1, 3, 3, 4, 4, 4, 2, 2, 1, 5, 4, 0, 5, 5, 4, 3, 4,
        5, 0, 3, 0, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 5, 2, 0, 0, 1, 0, 0, 0, 3, 1,
        5, 3, 2, 3, 5, 3, 3, 3, 1, 5, 5, 5, 5, 1, 2, 1, 4, 5, 4, 3, 3, 5, 5, 1,
        4, 2, 5, 4, 1, 4, 4, 4, 4, 5, 5, 4, 3, 4, 3, 5, 3, 3, 1, 1, 0, 4, 4, 3,
        1, 1, 1, 1, 3, 3, 3, 4, 3, 1, 4, 1, 1, 3, 5, 5, 5, 4, 4, 1, 3, 1, 4, 3,
        3, 3, 1, 2, 2, 5, 3, 2, 5, 1, 3, 3, 5, 5, 4, 0, 3, 5, 5, 5, 1, 2, 2, 4,
        1, 4, 5, 5, 5, 4, 5, 2, 1, 5, 4, 4, 0, 3, 5, 4, 1, 3, 3, 5, 4, 2, 1, 0,
        1, 3, 2, 4, 3, 2, 4, 4, 1, 1, 0, 3, 3, 3, 1, 5])

可以发现,我们输出的是测试集的内容。

那么很显然,如果我们最终得到了预测值,我们就可以通过以下代码来计算分类的正确数:

correct = int(pred[data.test_mask].eq(data.y[data.test_mask]).sum().item())

模型输出的pred实际上包含了所有节点的预测值,而我们只需要取测试集中的内容,即:

pred[data.test_mask]

然后再与data.y[data.test_mask]进行比较,最后计算二者对应位置相等的个数即可。

2. 构造数据集

如果我们需要的数据集在PyG中没有,我们就需要自己手动构造数据集。

例如对于一个无向图,我们知道了其节点特征矩阵x:

x = torch.tensor([[-1, 1], [0, 1], [1, 3]], dtype=torch.float)

一共3个节点,每个节点具有两个特征。

然后我们知道了节点间的邻接关系:

edge_index = torch.tensor([[0, 1, 1, 2],
                           [1, 0, 2, 1]], dtype=torch.long)

一共4条边,第一条边为0->1,第2条边为1->0。

然后我们就可以构造数据集:

data = Data(x=x, edge_index=edge_index)

有关GCN的实现放在下一篇文章!

以上就是PyG搭建GCN需要准备的数据格式的详细内容,更多关于PyG搭建GCN数据格式的资料请关注编程网其它相关文章!

--结束END--

本文标题: PyG搭建GCN需要准备的数据格式

本文链接: https://www.lsjlt.com/news/117881.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PyG搭建GCN需要准备的数据格式
    目录前言1. PyG数据集2. 构造数据集前言 有关GCN的原理可以参考:GCN图卷积神经网络原理 一开始是打算手写一下GCN,毕竟原理也不是很难,但想了想还是直接调包吧。在使用各种...
    99+
    2022-11-11
  • Mysql存储json格式数据需要掌握的
    目录 一、前言二、什么是 JSON三、Mysql当中json函数四、JSON值部分更新4.1.使用 Partial Updates 的条件4.2.如何在 binlog 中开启 Partial ...
    99+
    2023-10-11
    json mysql 数据库
  • HTTP协议中需要知道的三种数据格式分别是什么
    今天就跟大家聊聊有关HTTP协议中需要知道的三种数据格式分别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实习中的一个主要工作就是分析 HTT...
    99+
    2022-10-19
  • 建立良好的数据库备份和恢复策略时需要考虑什么
    建立良好的数据库备份和恢复策略时需要考虑什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。建立良好的数据库备份和恢复策略时,需要考虑以下几个点...
    99+
    2022-10-18
  • ASP、Bash和API:如何将不同的数据类型转换为你需要的格式?
    在现代计算机编程中,处理数据是非常重要的一项任务。尤其是在大数据时代,数据的类型和格式多种多样,因此对于程序员来说,转换不同的数据类型和格式是一项必备的技能。在本文中,我们将介绍如何使用ASP、Bash和API将不同的数据类型转换为你需要...
    99+
    2023-08-25
    bash api 数据类型
  • 磁盘显示使用驱动器中的光盘之前需要格式化的数据寻回方法
    使用驱动器中的光盘之前需要格式化说明这个盘的文件系统结构损坏了。在平时如果数据不重要,那么可以直接格式化就能用了。但是有的时候里面的数据很重要,那么就必须先恢复出数据再格式化。具体恢复方法可以看正文了解(不...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作