AGNNConv
- class dgl.nn.pytorch.conv.AGNNConv(init_beta=1.0, learn_beta=True, allow_zero_in_degree=False)[source]
基类:
Module
基于注意力机制的图神经网络层,来自论文 Attention-based Graph Neural Network for Semi-Supervised Learning
\[H^{l+1} = P H^{l}\]其中 \(P\) 计算如下
\[P_{ij} = \mathrm{softmax}_i ( \beta \cdot \cos(h_i^l, h_j^l))\]其中 \(\beta\) 是一个单标量参数。
- 参数:
注意
入度为零的节点将导致无效的输出值。这是因为没有消息传递到这些节点,聚合函数将应用于空输入。避免这种情况的常见做法是,如果图是同构的,则为图中的每个节点添加一个自循环,这可以通过以下方式实现:
>>> g = ... # a DGLGraph >>> g = dgl.add_self_loop(g)
调用
add_self_loop
对于某些图可能不起作用,例如异构图,因为无法确定自循环边的类型。对于这些情况,将allow_zero_in_degree
设置为True
以解除代码阻塞并手动处理入度为零的节点。处理这种情况的常见做法是在卷积后使用时过滤掉入度为零的节点。示例
>>> import dgl >>> import numpy as np >>> import torch as th >>> from dgl.nn import AGNNConv >>> >>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3])) >>> g = dgl.add_self_loop(g) >>> feat = th.ones(6, 10) >>> conv = AGNNConv() >>> res = conv(g, feat) >>> res tensor([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]], grad_fn=<BinaryReduceBackward>)
- forward(graph, feat)[source]
描述
计算 AGNN 层。
- 参数 graph:
图。
- 类型 graph:
DGLGraph
- 参数 feat:
输入特征,形状为 \((N, *)\),其中 \(N\) 是节点数,\(*\) 可以是任何形状。如果给定一对 torch.Tensor,则该对必须包含两个形状分别为 \((N_{in}, *)\) 和 \((N_{out}, *)\) 的张量,后者中的 \(*\) 必须与前者相等。
- 类型 feat:
torch.Tensor
- 返回:
输出特征,形状为 \((N, *)\),其中 \(*\) 应与输入形状相同。
- 返回类型:
torch.Tensor
- 抛出 DGLError:
如果输入图中有入度为 0 的节点,它将引发 DGLError,因为没有消息传递到这些节点。这将导致无效输出。可以通过将
allow_zero_in_degree
参数设置为True
来忽略此错误。