SIGNDiffusion

class dgl.transforms.SIGNDiffusion(k, in_feat_name='feat', out_feat_name='out_feat', eweight_name=None, diffuse_op='raw', alpha=0.2)[source]

基类:BaseTransform

来自 SIGN: 可伸缩 Inception 图神经网络 的扩散算子

它使用 \(TX, \cdots, T^{k}X\) 执行节点特征扩散,其中 \(T\) 是扩散矩阵,\(X\) 是输入节点特征。

具体来说,此模块为 \(T\) 提供了四种选择。

raw: 原始邻接矩阵 \(A\)

rw: 随机游走(行归一化)邻接矩阵 \(D^{-1}A\),其中 \(D\) 是度矩阵。

gcn: GCN 使用的对称归一化邻接矩阵,\(D^{-1/2}AD^{-1/2}\)

ppr: APPNP 使用的近似个性化 PageRank

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

此模块仅适用于同构图。

参数:
  • k (int) – 节点特征扩散的最大次数。

  • in_feat_name (str, optional) – g.ndata[{in_feat_name}] 应存储输入节点特征。默认为:‘feat’

  • out_feat_name (str, optional) – g.ndata[{out_feat_name}_i] 将存储输入节点特征扩散 i 次的结果。默认为:‘out_feat’

  • eweight_name (str, optional) – 从 g.edata 中获取边权重的名称。默认为:None,将图视为无权重图。

  • diffuse_op (str, optional) – 要使用的扩散算子,可以是 ‘raw’、‘rw’、‘gcn’ 或 ‘ppr’。默认为:‘raw’

  • alpha (float, optional) – 如果 diffuse_op'ppr' 时的重启概率,通常在 \([0.05, 0.2]\) 范围内。默认为:0.2

示例

>>> import dgl
>>> import torch
>>> from dgl import SIGNDiffusion
>>> transform = SIGNDiffusion(k=2, eweight_name='w')
>>> num_nodes = 5
>>> num_edges = 20
>>> g = dgl.rand_graph(num_nodes, num_edges)
>>> g.ndata['feat'] = torch.randn(num_nodes, 10)
>>> g.edata['w'] = torch.randn(num_edges)
>>> transform(g)
Graph(num_nodes=5, num_edges=20,
      ndata_schemes={'feat': Scheme(shape=(10,), dtype=torch.float32),
                     'out_feat_1': Scheme(shape=(10,), dtype=torch.float32),
                     'out_feat_2': Scheme(shape=(10,), dtype=torch.float32)}
      edata_schemes={'w': Scheme(shape=(), dtype=torch.float32)})