PYG从入门到放弃

第一步:直接看官方文档(因为几乎所有的博客都是复制的官方文档)

Introduction by Example --- pytorch_geometric documentation

在看文档的过程中发现了问题:

1.看到data = Data(x=x, edge_index=edge_index)这行代码时我想知道这个Data到底是啥?里面这些参数又都是啥?于是我果断跳到torch_geometric.data官方文档学习一下:torch_geometric.data.Data --- pytorch_geometric documentation

发现这玩意就是一个描述图的数据对象,用于存储节点级、链接级和图级属性。参数如下:

x (torch.Tensor, 可选) -- 形状为 [num_nodes, num_node_features] 的节点特征矩阵。(默认: None )

edge_index (LongTensor, 可选) -- 形状为 [2, num_edges] 的 COO 格式图连通性。(默认: None )

edge_attr (torch.Tensor, 可选) -- 形状为 [num_edges, num_edge_features] 的边特征矩阵。(默认: None )

y (torch.Tensor, 可选) 训练标签(可能具有任意形状)。例如,如果是节点级别的标签,其形状为 num_nodes, \*;如果是图级别的标签, 其形状为为 1,\*。(默认: None )

pos (torch.Tensor, 可选) -- 节点位置矩阵,形状 [num_nodes, num_dimensions] 。(默认: None )

time (torch.Tensor, 可选) -- 每个事件的时戳,形状 [num_edges][num_nodes] 。(默认: None )

2.查看参数时,我不明白什么是COO格式的边?

于是查一下稀疏矩阵的常用存储格式(COO、CSR、CSC)_coo csr-CSDN博客,发现这就是一种对稀疏矩阵的高效存储方式,简单说就是将矩阵中的非零元素用坐标和值表示出来,为零的元素不表示,以达到节省空间的目的。data.edge_index 中,第一行表示所有边的起点编号,第二行表示边对应的目标节点编号。

OK,现在已经对torch_geometric.data.Data参数有了一定的认识,可以跳回来继续学习PyG的实例介绍,快速的过一遍,并完成后面的练习来检验你自己的掌握程度。

练习:

1.edge_index.t().contiguous() 是做什么的?

2.从 TUDataset 基准测试套件中加载 "IMDB-BINARY" 数据集,并将其随机分割80%/10%/10% 的训练、验证和测试图。

3.以下输出中的每个数字代表什么意思?

print(batch)

>>> DataBatch(batch=1082, edge_index=2, 4066, x=1082, 21, y=32)
解答:

1.edge_index.t().contiguous() 是 PyTorch 操作组合,用于将图的边索引(edge_index)进行转置并确保数据在内存中连续。.t() 将二维张量转置(Transpose),即交换行和列的。**.contiguous()**生成一个新的连续内存张量副本,避免因转置导致的非连续内存布局问题。

在 PyTorch 中,转置操作不会复制数据,而是通过调整内存步长(stride)实现。若后续操作(如数据加载或第三方库调用)需要连续内存布局,则必须使用 .contiguous() 生成物理连续的张量副本。

【具体细节自己去看PyG文档】

2.略【自己实现一下】

3.batch=[1082]:

当前批次中所有图的总节点数为1082;

这个张量包含每个节点所属图的索引(0~31),用于区分不同图的节点;

示例:[0,0,0,1,1,2,...] 表示前3个节点属于图0,接着2个节点属于图1,依此类推.

edge_index=[2, 4066]:

2表示边的定义方式(起点节点索引 + 终点节点索引)

当前批次中所有图的总边数4066

每列表示一条边:[[源节点1, 源节点2, ...], [目标节点1, 目标节点2, ...]]

x=[1082, 21]:

节点总数1082(与batch大小对应)

每个节点的特征维度21(对于IMDB-BINARY数据集,表示21种电影类型特征)

y=[32]:

当前批次中包含的图数量32(即batch size);

每个元素是图的分类标签(IMDB-BINARY是二分类:0/1)

相关推荐
是隼人1 小时前
buuctf-pwn ciscn_2019_sw_1(32位只有一次格式化机会)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
传奇开心果编程2 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack
传奇开心果编程2 小时前
【ArkUI 练中学】第14课:应用性能优化实战
学习·ui·华为·harmonyos
PNP Robotics3 小时前
【PNP具身解读】GPT6 Astra:具身智能新范式,大模型 + Franka机器人快速落地验证一、GPT6 Astra 背后的布局、数据与具身方向
人工智能·学习·机器学习·机器人
小李不想当小白3 小时前
PCB结构与组成(PCB设计入门学习笔记)
经验分享·笔记·单片机·嵌入式硬件·学习·pcb工艺·pcb
那年窗外下的雪.3 小时前
第 02 天:Linux 权限、inode、目录项与链接
学习·http
XGStudio20243 小时前
免费安全的 - 二维码转换工具
学习·ai
hanlin033 小时前
刷题笔记:力扣第76题-最小覆盖子串
笔记·算法·leetcode
hengmeida3 小时前
楼宇控制柜标准化项目交付完整规范
大数据·网络·笔记
邵奈一3 小时前
【紧急处理ZCode事件】ZCode 工作区快照静默上传:检测方法与三层防护实践
人工智能·学习·大模型·国产