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来建图:
from torch_geometric.data import Data
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`
import torch
from torch_geometric.data import Data
# 由于是无向图,因此有 4 条边:(0 -> 1), (1 -> 0), (1 -> 2), (2 -> 1)
edge_index = torch.tensor([[0, 1, 1, 2],
                           [1, 0, 2, 1]], dtype=torch.long)
# 节点的特征                           
x = torch.tensor([[-1], [0], [1]], dtype=torch.float)
data = Data(x=x, edge_index=edge_index)
    注意
    
     edge_index
    
    中边的存储方式,
    
     有两个
     
      list
     
     ,第 1 个
     
      list
     
     是边的起始点,第 2 个
     
      list
     
     是边的目标节点
    
    。
   
    另一种存储
    
     edge_index的方式:
    
import torch
from torch_geometric.data import Data
edge_index = torch.tensor([[0, 1],
                           [1, 0],
                           [1, 2],
                           [2, 1]], dtype=torch.long)
x = torch.tensor([[-1], [0], [1]], dtype=torch.float)
data = Data(x=x, edge_index=edge_index.t().contiguous())
    这种情况
    
     edge_index
    
    需要
    
     先转置然后使用
     
      contiguous()
     
     方法
    
    。
   
    有了
    
     Data
    
    ,我们可以创建自己的
    
     Dataset
    
    ,读取并返回
    
     Data。
    
    参考:
    
     图神经网络 PyTorch Geometric 入门教程 – 掘金
    
   
有了data对象就可以快速开始了,PyG官方提供了许多图神经网络算法的接口
     
   
     
   
 
