mindspore_gl.nn.APPNPConv

class mindspore_gl.nn.APPNPConv(k: int, alpha: float, edge_drop=0.0)[源代码]

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

\[\begin{split}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{split}\]

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

参数:
  • k (int) - 迭代次数。

  • alpha (float) - 传输概率。

  • edge_drop (float, 可选) - 每个节点接收到的边消息的dropout rate。默认值:0.0。

输入:
  • x (Tensor) - 输入节点功能。Shape为 \((N,*)\) 其中 \(N\) 是节点数, \(*\) 可以是任何shape。

  • in_deg (Tensor) - 节点的入度。Shape为 \((N, )\) 其中 \(N\) 是节点数。

  • out_deg (Tensor) - 节点的出度。Shape为 \((N, )\) 其中 \(N\) 是节点数。

  • g (Graph) - 输入图表。

输出:
  • Tensor,输出特征Shape为 \((N,*)\) ,其中 \(*\) 应与输入shape相同。

异常:
  • TypeError - 如果 k 不是int。

  • TypeError - 如果 alphaedge_drop 不是float。

  • ValueError - 如果 alpha 不在范围[0.0, 1.0]内。

  • ValueError - 如果 edge_drop 不在范围[0.0, 1.0)内。

支持平台:

Ascend GPU

样例:

>>> import mindspore as ms
>>> from mindspore_gl.nn import APPNPConv
>>> from mindspore_gl import GraphField
>>> n_nodes = 4
>>> n_edges = 7
>>> feat_size = 4
>>> src_idx = ms.Tensor([0, 1, 1, 2, 2, 3, 3], ms.int32)
>>> dst_idx = ms.Tensor([0, 0, 2, 1, 3, 0, 1], ms.int32)
>>> ones = ms.ops.Ones()
>>> feat = ones((n_nodes, feat_size), ms.float32)
>>> graph_field = GraphField(src_idx, dst_idx, n_nodes, n_edges)
>>> in_degree = ms.Tensor([3, 2, 1, 1], ms.int32)
>>> out_degree = ms.Tensor([1, 2, 1, 2], ms.int32)
>>> appnpconv = APPNPConv(k=3, alpha=0.5, edge_drop=1.0)
>>> res = appnpconv(feat, in_degree, out_degree, *graph_field.get_graph())
>>> print(res.shape)
(4, 4)