RelGraphConv

class dgl.nn.pytorch.conv.RelGraphConv(in_feat, out_feat, num_rels, regularizer=None, num_bases=None, bias=True, activation=None, self_loop=True, dropout=0.0, layer_norm=False)[source]

基类: Module

基于 Modeling Relational Data with Graph Convolutional Networks 的关系图卷积层

可描述如下

\[h_i^{(l+1)} = \sigma(\sum_{r\in\mathcal{R}} \sum_{j\in\mathcal{N}^r(i)}e_{j,i}W_r^{(l)}h_j^{(l)}+W_0^{(l)}h_i^{(l)})\]

其中 \(\mathcal{N}^r(i)\) 是节点 \(i\) 关于关系 \(r\) 的邻居集合。\(e_{j,i}\) 是归一化项。\(\sigma\) 是激活函数。\(W_0\) 是自环权重。

基分解正则化将 \(W_r\) 分解为

\[W_r^{(l)} = \sum_{b=1}^B a_{rb}^{(l)}V_b^{(l)}\]

其中 \(B\) 是基的数量,\(V_b^{(l)}\) 是与系数 \(a_{rb}^{(l)}\) 线性组合得到的。

块对角分解正则化将 \(W_r\) 分解为 \(B\) 个块对角矩阵。我们将 \(B\) 称为基的数量。

块分解正则化将 \(W_r\) 分解为

\[W_r^{(l)} = \oplus_{b=1}^B Q_{rb}^{(l)}\]

其中 \(B\) 是基的数量,\(Q_{rb}^{(l)}\) 是形状为 \(R^{(d^{(l+1)}/B)*(d^{l}/B)}\) 的块基。

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

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

  • num_rels (int) – 关系数量。

  • regularizer (str, optional) –

    要使用的权重正则化器(“basis”、“bdd” 或 None

    • “basis” 用于基分解。

    • “bdd” 用于块对角分解。

    • None 表示不应用正则化。

    默认值: None

  • num_bases (int, optional) – 基的数量。当应用正则化器时生效。如果为 None,则使用关系数量 (num_rels)。默认值: None。注意,当应用 “bdd” 正则化器时,in_featout_feat 必须能被 num_bases 整除。

  • bias (bool, optional) – 如果添加偏置则为 True。默认值: True

  • activation (callable, optional) – 激活函数。默认值: None

  • self_loop (bool, optional) – 如果包含自环消息则为 True。默认值: True

  • dropout (float, optional) – Dropout 比率。默认值: 0.0

  • layer_norm (bool, optional) – 如果添加层归一化则为 True。默认值: False

示例

>>> import dgl
>>> import numpy as np
>>> import torch as th
>>> from dgl.nn import RelGraphConv
>>>
>>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3]))
>>> feat = th.ones(6, 10)
>>> conv = RelGraphConv(10, 2, 3, regularizer='basis', num_bases=2)
>>> etype = th.tensor([0,1,2,0,1,2])
>>> res = conv(g, feat, etype)
>>> res
tensor([[ 0.3996, -2.3303],
        [-0.4323, -0.1440],
        [ 0.3996, -2.3303],
        [ 2.1046, -2.8654],
        [-0.4323, -0.1440],
        [-0.1309, -1.0000]], grad_fn=<AddBackward0>)
forward(g, feat, etypes, norm=None, *, presorted=False)[source]

前向计算。

参数:
  • g (DGLGraph) – 输入图。

  • feat (torch.Tensor) – 节点的二维特征张量。形状: \((|V|, D_{in})\)

  • etypes (torch.Tensorlist[int]) – 边类型的 1D 整型张量。形状: \((|E|,)\)

  • norm (torch.Tensor, optional) – 边归一化值的一维张量。形状: \((|E|,)\)

  • presorted (bool, optional) – 输入图的边是否已按其类型排序。在预排序图上进行前向计算可能更快。由 to_homogeneous() 创建的图自动满足此条件。另请参阅 reorder_graph() 手动对边进行排序。

返回:

新的节点特征。形状: \((|V|, D_{out})\)

返回类型:

torch.Tensor