PyG的edge index形式是$[(node_1,node_2), (node_1, node_3)...]$这种edge pair。想转换回 邻接矩阵 的形式。
PyG中不是直接存储邻接矩阵,而是存储边的索引(edge_index)和边的权重(edge_weight)。其中edge_index就是一个维度为(2,|E|)的tensor,|E|为边的数量。在PyG中有一个例子,下图有3个节点0,1,2,因为是无向图,所以它的边有(0,1),(1,0),(1,2),(2,0)共4条边,所以相应的edge_index就为tensor[[0,1...
# Step 1: 增加自连接到邻接矩阵 edge_index, _ = add_self_loops(edge_index, num_nodes=x.size(0)) # Step 2: 对节点的特征矩阵进行线性变换 x = self.lin(x) # Step 3-5: Start propagating messages. return self.propagate(edge_index, size=(x.size(0), x.size(0)), x=x) def messag...
MessagePassing.propagate(edge_index, size=None, **kwargs):开始传播消息的初始调用。接收构建消息和更新节点嵌入所需的边缘索引和所有其他数据。propagate()不仅限于交换形状的平方邻接矩阵中的消息,还可以通过作为附加参数传递来交换形状的一般稀疏赋值矩阵(例如,二分图)中的消息。如果设置为None,则假定赋值矩阵是一...
神经网络通常以分批的方式进行训练。PyG通过创建稀疏块对角邻接矩阵(由edge_index定义)并在节点维度上连接特征矩阵和目标矩阵来实现小批处理的并行化。这种组合允许在一个批处理中有不同数量的节点和边: PyG包含一个torch_genometric.loader.DataLoader, 其能够完成这个串联过程。让我们通过一个例子来学习它: ...
PyG实现GCN(简易版)主要通过调用库中的接口完成。值得注意的是,PyG内部结构不使用邻接矩阵torch.SparseTensor,而是通过edge_index和edge_weight进行计算。在矩阵形式实现GCN(简易版)中,给定图的邻接矩阵和节点特征矩阵,使用矩阵表示GCN层中的参数和隐藏层特征。通常,GCN层的操作表达式为 [公式],其中...
PyG 通过创建稀疏块对角邻接矩阵(由 edge_index 定义)并在节点维度中连接特征和目标矩阵,实现小批量的并行化。这种组合允许在一批示例中使用不同数量的节点和边, PyG 包含自己的 torch_geometric.loader.DataLoader,它已经处理了这个串联过程,以下是一个例子: from torch_geometric.datasets import TUDataset from torch...
edge_index, _ = add_self_loops(edge_index, num_nodes=x.size(0)) x = self.lin(x) row, col = edge_index deg = degree(col, x.size(0), dtype=x.dtype) deg_inv_sqrt = deg.pow(-0.5) norm = deg_inv_sqrt[row] * deg_inv_sqrt[col] ...
可以发现,GCNConv中需要输入的是节点特征矩阵x和邻接关系edge_index,还有一个可选项edge_weight。因此我们首先: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 x,edge_index=data.x,data.edge_index x=self.conv1(x,edge_index)x=F.relu(x)x=F.dropout(x,training=self.training) ...
(详细推导在本文附),其中D为邻接矩阵,A为度矩阵(是一个对角矩阵)。 图机器学习成功的关键在于如何为节点构建表征,而图的信息包括结点、边、拓扑结构,本次就是先学习基础的Data类——PyG图的表示和使用。 在学习过程中也可以多看下pytorch-geometric的官方文档的源代码,比如在对应的...