SGConv

class dgl.nn.pytorch.conv.SGConv(in_feats, out_feats, k=1, cached=False, bias=True, norm=None, allow_zero_in_degree=False)[source]

基类: Module

来自 Simplifying Graph Convolutional Networks 的 SGC 层

\[H^{K} = (\tilde{D}^{-1/2} \tilde{A} \tilde{D}^{-1/2})^K X \Theta\]

其中 \(\tilde{A}\)\(A\) + \(I\)。因此,图输入应该添加自环边。

参数:
  • in_feats (int) – 输入特征的数量;即 \(X\) 的维数。

  • out_feats (int) – 输出特征的数量;即 \(H^{K}\) 的维数。

  • k (int) – 跳数 \(K\)。默认值:1

  • cached (bool) –

    如果为 True,则模块将缓存

    \[(\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}})^K X\Theta\]

    在第一次 forward 调用时。此参数只应在直推式学习设置中设置为 True

  • bias (bool) – 如果为 True,则在输出中添加一个可学习的偏置。默认值:True

  • norm (可调用激活函数/层None可选) – 如果不为 None,则对更新后的节点特征应用归一化。默认值:False

  • allow_zero_in_degree (bool, 可选) – 如果图中有入度为 0 的节点,则这些节点的输出将无效,因为没有消息传递给这些节点。这对于某些应用是有害的,会导致静默的性能下降。如果检测到输入图中有入度为 0 的节点,此模块将引发 DGLError。通过设置为 True,将抑制此检查并让用户自行处理。默认值:False

注意

入度为零的节点将导致输出值无效。这是因为没有消息传递到这些节点,聚合函数将应用于空输入。避免这种情况的一个常见做法是,如果图是同构的,则为图中的每个节点添加一个自环,这可以通过以下方式实现:

>>> 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 SGConv
>>>
>>> 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 = SGConv(10, 2, k=2)
>>> res = conv(g, feat)
>>> res
tensor([[-1.9441, -0.9343],
        [-1.9441, -0.9343],
        [-1.9441, -0.9343],
        [-2.7709, -1.3316],
        [-1.9297, -0.9273],
        [-1.9441, -0.9343]], grad_fn=<AddmmBackward>)
forward(graph, feat, edge_weight=None)[source]

说明

计算 Simplifying Graph Convolution 层。

参数 graph:

图。

类型 graph:

DGLGraph

参数 feat:

输入特征,形状为 \((N, D_{in})\),其中 \(D_{in}\) 是输入特征的大小,\(N\) 是节点数。

类型 feat:

torch.Tensor

参数 edge_weight:

在消息传递过程中使用的边权重。这等同于在上面的公式中使用加权邻接矩阵,并且 \(\tilde{D}^{-1/2}\tilde{A} \tilde{D}^{-1/2}\) 基于 dgl.nn.pytorch.conv.graphconv.EdgeWeightNorm

类型 edge_weight:

torch.Tensor, 可选

返回:

输出特征,形状为 \((N, D_{out})\),其中 \(D_{out}\) 是输出特征的大小。

返回类型:

torch.Tensor

引发 DGLError:

如果输入图中有入度为 0 的节点,将引发 DGLError,因为没有消息传递到这些节点。这将导致输出无效。通过将 allow_zero_in_degree 参数设置为 True 可以忽略此错误。

注意

如果 cache 设置为 True,则 featgraph 在训练期间不应更改,否则将得到错误的结果。

reset_parameters()[source]

说明

重新初始化可学习参数。

注意

模型参数使用 xavier 初始化,偏置初始化为零。