DenseGraphConv

class dgl.nn.pytorch.conv.DenseGraphConv(in_feats, out_feats, norm='both', bias=True, activation=None)[source]

Bases: Module

图卷积层来自使用图卷积网络进行半监督分类

我们建议用户在密集图上应用图卷积时使用此模块。

Parameters:
  • in_feats (int) – 输入特征大小;即,\(h_j^{(l)}\) 的维度数。

  • out_feats (int) – 输出特征大小;即\(h_i^{(l+1)}\)的维度数。

  • norm (str, optional) – 如何应用归一化器。如果是 ‘right’,则将聚合的消息除以每个节点的入度,这相当于对接收到的消息进行平均。如果是 ‘none’,则不应用归一化。默认是 ‘both’,其中应用了论文中的 \(c_{ij}\)

  • 偏差 (bool, 可选) – 如果为True,则向输出添加一个可学习的偏差。默认值:True

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

注释

零入度节点将导致全零输出。为了避免这种情况,常见的做法是为图中的每个节点添加自环,这可以通过将邻接矩阵的对角线设置为1来实现。

示例

>>> import dgl
>>> import numpy as np
>>> import torch as th
>>> from dgl.nn import DenseGraphConv
>>>
>>> feat = th.ones(6, 10)
>>> adj = th.tensor([[0., 0., 1., 0., 0., 0.],
...         [1., 0., 0., 0., 0., 0.],
...         [0., 1., 0., 0., 0., 0.],
...         [0., 0., 1., 0., 0., 1.],
...         [0., 0., 0., 1., 0., 0.],
...         [0., 0., 0., 0., 0., 0.]])
>>> conv = DenseGraphConv(10, 2)
>>> res = conv(adj, feat)
>>> res
tensor([[0.2159, 1.9027],
        [0.3053, 2.6908],
        [0.3053, 2.6908],
        [0.3685, 3.2481],
        [0.3053, 2.6908],
        [0.0000, 0.0000]], grad_fn=<AddBackward0>)

另请参阅

GraphConv

forward(adj, feat)[source]

计算(密集)图卷积层。

Parameters:
  • adj (torch.Tensor) – 要应用图卷积的图的邻接矩阵,当应用于单向二分图时,adj 的形状应为 应为形状 \((N_{out}, N_{in})\);当应用于同构图时,adj 的形状应为 \((N, N)\)。在这两种情况下, 一行表示目标节点,而一列表示源节点。

  • 特征 (torch.Tensor) – 输入特征。

Returns:

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

Return type:

torch.Tensor

reset_parameters()[source]

重新初始化可学习的参数。