APPNPConv

class dgl.nn.pytorch.conv.APPNPConv(k, alpha, edge_drop=0.0)[source]

基类: Module

来自论文 Predict then Propagate: Graph Neural Networks meet Personalized PageRank 的近似个性化传播神经网络层

\[ \begin{align}\begin{aligned}H^{0} &= X\\H^{l+1} &= (1-\alpha)\left(\tilde{D}^{-1/2} \tilde{A} \tilde{D}^{-1/2} H^{l}\right) + \alpha H^{0}\end{aligned}\end{align} \]

其中 \(\tilde{A}\)\(A\) + \(I\)

参数:
  • k (int) – 迭代次数 \(K\)

  • alpha (float) – 瞬移概率 \(\alpha\)

  • edge_drop (float, 可选) – 边上的 dropout 率,控制每个节点接收到的消息。默认值:0

示例

>>> import dgl
>>> import numpy as np
>>> import torch as th
>>> from dgl.nn import APPNPConv
>>>
>>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3]))
>>> feat = th.ones(6, 10)
>>> conv = APPNPConv(k=3, alpha=0.5)
>>> res = conv(g, feat)
>>> print(res)
tensor([[0.8536, 0.8536, 0.8536, 0.8536, 0.8536, 0.8536, 0.8536, 0.8536, 0.8536,
        0.8536],
        [0.9268, 0.9268, 0.9268, 0.9268, 0.9268, 0.9268, 0.9268, 0.9268, 0.9268,
        0.9268],
        [0.9634, 0.9634, 0.9634, 0.9634, 0.9634, 0.9634, 0.9634, 0.9634, 0.9634,
        0.9634],
        [0.9268, 0.9268, 0.9268, 0.9268, 0.9268, 0.9268, 0.9268, 0.9268, 0.9268,
        0.9268],
        [0.9634, 0.9634, 0.9634, 0.9634, 0.9634, 0.9634, 0.9634, 0.9634, 0.9634,
        0.9634],
        [0.5000, 0.5000, 0.5000, 0.5000, 0.5000, 0.5000, 0.5000, 0.5000, 0.5000,
        0.5000]])
forward(graph, feat, edge_weight=None)[source]

描述

计算 APPNP 层。

参数 graph:

图。

类型 graph:

DGLGraph

参数 feat:

输入特征,形状为 \((N, *)\)\(N\) 是节点数,\(*\) 可以是任何形状。

类型 feat:

torch.Tensor

参数 edge_weight:

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

类型 edge_weight:

torch.Tensor, 可选

返回:

输出特征,形状为 \((N, *)\),其中 \(*\) 应与输入形状相同。

返回类型:

torch.Tensor