pytorch-geometric笔记

2023-11-17

这篇博客是我学习pytorch-geometric(正文将以PyG代替)时做的笔记,有错误的地方在所难免,欢迎指正,非常感谢。

参考pytorch-geometric官网

1 图数据处理

1.1 创建自己的图数据

PyG创建图的方式很简单,假设我们有一张无向无权图,它包含3个结点和2条边,如下图所示:

图1

在数据结构里面我们创建一张图,至少需要指定其结点、 边等信息。PyG也不例外,用PyG创建一张图,可以给图指定如下的信息
图二

x 表示结点的特征。二维矩阵, shape: [结点个数, 结点的特征维度]

edge_index表示边的信息。这个有点反人类,二维矩阵,shape[2, 边的条数]。 比如我们有三条边(0,1)(0, 2), (1, 2) ,那么这个矩阵将表示成
[
[0, 0, 1],
[1, 2, 2]
]
每一列表示一条边

edge_attr 表示边的属性,例如权重,结点之间的关联程度等信息。 二维矩阵,shape[边数, 边的特征维度]

y 表示结点的标签,二维矩阵,shape[结点个数, 标签的维度]。当标签的维度大于1时,就成了多标签问题了

注意!在创建图的时候,这些属性不是都要指定的,根据需要指定就好,甚至可以一个都不指定(空图)

现在可以开始创建我们的第一张图了 (根据上面那张图)

import torch
from torch_geometric.data import Data # 用来创建图

# 三个结点的特征, 特征维度为1
x = torch.tensor([[-1], [0], [1]], dtype=torch.float)

# 边
edge_index = torch.tensor([[0, 1, 1, 2],
                           [1, 0, 2, 1]], dtype=torch.long)
# 每个结点的标签, 假设我们只有两个标签0和1
y = torch.tensor([[0], [0], [1]])

# 创建图
data = Data(x=x, edge_index=edge_index, y=y)

print(data)

输出结果:

Data(edge_index=[2, 4], x=[3, 1], y=[3, 1])

我们还可以从data中获取更多信息

# 结点个数
print(data.num_nodes)
# 边数
print(data.num_edges)

# 是否为有向图
print(data.is_directed())

# 是否包含孤立结点
print(data.contains_isolated_nodes())

# 结点的特征数
print(data.num_node_features)

输出

3
4
False
False
1

1.2 使用PyG提供的数据集

PyG中提供了大量的数据集供我们使用,比如Cora,Citeseer, Pubmed等经典的数据集。我们可以使用TUDataset轻松加载数据,只需要指定数据集在你本地的存储位置以及你要加载的数据集的name
接下来我们尝试加载ENZYMES数据集,它包含600张图,六个类别。

import torch
from torch_geometric.data import Data
from torch_geometric.datasets import TUDataset

dataset = TUDataset(root='./dataset/ENZYMES', name='ENZYMES')
# 图的个数
print(len(dataset))
# 类别
print(dataset.num_classes)
# 结点特征
print(dataset.num_node_features)

输出

Downloading https://www.chrsmrrs.com/graphkerneldatasets/ENZYMES.zip
Extracting dataset\ENZYMES\ENZYMES\ENZYMES.zip
Processing...
Done!
600
6
3

这样,我们就完成了数据集的加载。事实上,TUDataset的功能远远不止这些,我们还可以做更多的事情!稍微look一下它的源码。

def __init__(self, root, name, transform=None, pre_transform=None,
             pre_filter=None, use_node_attr=False, use_edge_attr=False,
             cleaned=False):
    self.name = name
    self.cleaned = cleaned
    super(TUDataset, self).__init__(root, transform, pre_transform,
                                    pre_filter)
    self.data, self.slices = torch.load(self.processed_paths[0])
    if self.data.x is not None and not use_node_attr:
        num_node_attributes = self.num_node_attributes
        self.data.x = self.data.x[:, num_node_attributes:]
    if self.data.edge_attr is not None and not use_edge_attr:
        num_edge_attributes = self.num_edge_attributes
        self.data.edge_attr = self.data.edge_attr[:, num_edge_attributes:]

可以看到我们还可以对数据进行transform和pretransform,使用结点属性等等

对拿到的数据集进行划分,shuffle等

from torch_geometric.dataset import TUDataset

dataset = TUDataset(root='./dataset/ENZYMES', name='ENZYMES')
# 训练数据集
dataset_train = dataset[:540]
dataset_train = dataset_train.shuffle()

# 测试数据集
dataset_test = dataset[540:]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytorch-geometric笔记 的相关文章

随机推荐

  • AndroidStudio 开发中字符串国际化string.xml与Excel表格的互相导入

    在Android 的开发中有时需要适配国际化 需要将string xml中的字符串导出翻译 然后再将翻译后的字符串导入至AndroidStudio中相应的string xml中 关于国际化的实现 可参考Android适配国际化的三种方式 应
  • DP++转HDMI1.4

    CS5216AN 一 主要特征 符合 VESA 双模式 DisplayPort 标准 版本 1 适用于 2 类电缆适配器应用 包括所需的 2 类电缆适配器标识和控制寄存器以及 I2C over AUX 转换 符合 HDMI 1 4b 规范
  • 2.1 目标检测简介

    目录 2 1 目标检测简介 1 2 1 1 传统的目标检测方法 2 1 2 深度学习时代的目标检测 2 1 目标检测简介1 目标检测是另一项非常重要的计算机视觉任务 图像分类的目的是辨别图片中所包含的主体对象是什么 而目标检测的目标是检测图
  • Prometheus 远程读写 Influxdb

    Prometheus 远程读写 Influxdb Influxdb InfluxDB 是一款开源的时序数据库 是InfluxData 是一个公司 提供时序平台 下的一个产品 使用Go语言开发 时序数据库 Time Series Databa
  • Django2 提示:TemplateDoesNotExist

    编写简单Django2 页面 查询后台数据在前端页面展示 但总是提示TemplateDoesNotExist 资源不存在 第一步 创建资源模板文件夹template 第二步 编辑项目的资源配置setting py TEMPLATES BAC
  • C++ NOIP普及组2017初赛答案版

    CCF NOIP2017 初赛普及组C 语言试题第1 页 共7 页第二十三届全国青少年信息学奥林匹克联赛初赛普及组C 语言试题竞赛时间 2017 年10 月14 日14 30 16 30选手注意 试题纸共有7 页 答题纸共有2 页 满分10
  • 数组实例解析3(杨辉三角)

    根据用户输入的行数n输出对应行数的杨辉三角 具体如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 public class ArrayTraingleTest public static void
  • SpringMVC+ElementUl+Vue实现增、删、改、查、多条件搜索、分页功能(前端后端分离)

    使用vue element springMVC来实现增 删 改 查 搜索 分页这几个功能 对于今天老师留的作业小张与小红对话 一班小红同学对二班小张同学说 今天我们班里学了ElementUl组件可是我学没明白 老师还留了个基于vue Ele
  • HTTP和HTTPS协议的区别

    HTTP 超文本传输协议 和HTTPS 安全超文本传输协议 是用于在客户端和服务器之间传输数据的两种不同的协议 它们之间的主要区别如下 1 安全性 HTTP是明文传输协议 数据在传输过程中是以明文形式发送的 容易被第三方窃取和篡改 而HTT
  • cloudstack 创建与删除VM流程

    创建VM时 用户将命令发给ApiServlet处理 通过调度执行DeployVMCmd的execute方法 它的顺序图如下 删除VM调度执行DestroyVMCmd的execute方法 它的流程图如下 在DestroyVMCmd在执行exe
  • springboot修改默认8080端口

    springboot自带的Tomcat端口是8080 有时候项目多了就会引起端口占用的问题 所以我们需要修改其中的端口或者杀掉8080端口 1 修改springboot端口方法 我们只需要在 application properties 中
  • angularjs中state的参数4_AngularJS路由系列(四)- UI-Router的$state服务、路由事件、获取路由参数...

    http www myexception cn javascript 2041588 html ngularJS路由系列 4 UI Router的 state服务 路由事件 获取路由参数 项目文件结构 node modules public
  • 华为OD机试 - 计算误码率(Java)

    题目描述 误码率是最常用的数据通信传输质量指标 它可以理解为 在多少位数据中出现一位差错 移动通信网络中的误码率主要是指比特误码率 其计算公式如下 比特误码率 错误比特数 传输总比特数 为了简单 我们使用字符串来标识通信的信息 一个字符错误
  • python语法:多线程同时处理大量文件

    先写在前面 thread模块 简单来说 cpu的反复横跳而已 要写并发机制 还得用多进程multiprocessing模块 想要快速实现的朋友可以看看我这篇文章 是枝裕和 内 python中的多进程 zhuanlan zhihu com 当
  • conda activate激活虚拟环境时报错:Your shell has not been properly configured to use ‘conda activate‘.的解决方法

    场景 ubuntu系统 问题描述 使用conda activate pytorch想激活虚拟环境pytorch时报错 CommandNotFoundError Your shell has not been properly configu
  • 电脑注册表误删恢复办法:系统文件和设置还原法

    一 起因 为了修改电脑字体一不小心把Control Panel整个注册表给删除了 导致电脑界面变的锯齿 界面变形等各种问题 网上找了许多方法都没成功或者难度较大 最终使用系统恢复还原点将系统变成几个小时前的各种设置 包括浏览器记录 系统设置
  • Ubuntu下FFmpeg的安装方式

    FFmpeg介绍 音视频的广泛应用 直播类 音视频会议 腾讯会议 Zoom 娱乐直播 斗鱼 虎牙 音视频通话 QQ 微信 网络视频 腾讯视频 爱奇艺 短视频 抖音 快手 视频监控 海康 人工智能 人脸识别 智能音箱 概念 FFMPEG全称为
  • 性能测试学习之三--关联

    为什么要做关联 脚本里面这个值是写死的 但服务器传值每次变化 为了保证脚本的正确性 所以要将这个值取到传到脚本里面 所以要将这个值进行关联 关联就是将服务器动态变化的一个值保存为一个动态参数 以便后面需要用的该值的请求来用 一 哪些值或者哪
  • 服务器exsi 5.5安装linux,IBM X3850 X5服务器ESXi 5安装配置全过程——安装

    本系列以一台新上架的IBM X3850 X5服务器为例 从开始做RAID5到VMWARE ESXI5的安装配置进行全程演示 希望对你有些帮助 一 服务器RAID5 启动服务器 直到出现如下界面时 按CTRL H键进入配置阵列界面 点击 St
  • pytorch-geometric笔记

    这篇博客是我学习pytorch geometric 正文将以PyG代替 时做的笔记 有错误的地方在所难免 欢迎指正 非常感谢 参考pytorch geometric官网 1 图数据处理 1 1 创建自己的图数据 PyG创建图的方式很简单 假