• PyG学习 - DATA(torch_geometric.data.Data )


    pyG 是基于pytorch 的图神经网络的深度学习框架;

    学习链接: torch_geometric.data — pytorch_geometric documentation

            用于记录和表示一张图信息的是PyG 当中的 torch_geometric.data.Data 类;

    1 torch_geometric.data.Data属性

            包含5个属性,每一个属性都不是必须的;

                    x: 用于存储每个节点的特征,形状是[num_nodes, num_node_features]

           edge_index: 用于存储节点之间的边,形状是 [2, num_edges]  使用稀疏的方式存储边关系(edge_index中边的存储方式,有两个list,第 1 个list是边的起始点,第 2 个list是边的目标节点));

                    pos: 存储节点的坐标,形状是[num_nodes, num_dimensions]

           y: 存储样本标签。如果是每个节点都有标签,那么形状是[num_nodes, *];如果是整张图只有一个标签,那么形状是[1, *]

           edge_attr: 存储边的特征。形状是[num_edges, num_edge_features]

     使用pyG的Data来建图:

    1. from torch_geometric.data import Data
    2. data = Data(x=x, edge_index=edge_index)

            在实际的应用场景中,图的形式多种多样,单纯的使用 x 和 edge index 是无法描述这众多的图结构的;

            在 PyG 的Data 类当中,还提供了许多其他属性用于描述图的变量。

            实际上,Data对象不仅仅限制于这些属性,我们可以通过data.face来扩展Data,以张量保存三维网格中三角形的连接性;

                  在Data里包含了样本的 label,这意味和 PyTorch 稍有不同,在PyTorch中,我们重写Dataset__getitem__(),根据 index 返回对应的样本和 label;

                    在 PyG 中,我们使用的不是这种写法,而是在get()函数中根据 index 返回torch_geometric.data.Data类型的数据,在Data里包含了数据和 label;
           

    使用`torch_geometric.data.Data`

    1. import torch
    2. from torch_geometric.data import Data
    3. # 由于是无向图,因此有 4 条边:(0 -> 1), (1 -> 0), (1 -> 2), (2 -> 1)
    4. edge_index = torch.tensor([[0, 1, 1, 2],
    5. [1, 0, 2, 1]], dtype=torch.long)
    6. # 节点的特征
    7. x = torch.tensor([[-1], [0], [1]], dtype=torch.float)
    8. data = Data(x=x, edge_index=edge_index)

             注意edge_index中边的存储方式,有两个list,第 1 个list是边的起始点,第 2 个list是边的目标节点

    另一种存储edge_index的方式:

    1. import torch
    2. from torch_geometric.data import Data
    3. edge_index = torch.tensor([[0, 1],
    4. [1, 0],
    5. [1, 2],
    6. [2, 1]], dtype=torch.long)
    7. x = torch.tensor([[-1], [0], [1]], dtype=torch.float)
    8. data = Data(x=x, edge_index=edge_index.t().contiguous())

            这种情况edge_index需要先转置然后使用contiguous()方法

    有了Data,我们可以创建自己的Dataset,读取并返回Data。

    参考:图神经网络 PyTorch Geometric 入门教程 - 掘金

            有了data对象就可以快速开始了,PyG官方提供了许多图神经网络算法的接口

     

     

  • 相关阅读:
    谈一谈凑单页的那些优雅设计
    盲盒小程序库存管理的关键策略
    【蓝桥杯国赛真题07】python杨辉三角形 蓝桥杯青少年组python编程 蓝桥杯国赛真题解析
    重写Object类的方法
    使用NATS及其nats.c客户端简单示例用法(nats.c的API接口)
    Nginx:epoll红黑树和双向链表如何做到少量拷贝和轮循实现高并发
    论文排版图片一栏设置与文献引用的超链接设置-论文投稿经验总结-第3期
    go-redis之初始化连接
    【Python搜索算法】广度优先搜索(BFS)算法原理详解与应用,示例+代码
    息肉分割(Polyp Segmentation)方向常用数据集汇总
  • 原文地址:https://blog.csdn.net/qq_40671063/article/details/126256429