PNAConv

class dgl.nn.pytorch.conv.PNAConv(in_size, out_size, aggregators, scalers, delta, dropout=0.0, num_towers=1, edge_feat_size=0, residual=True)[source]

基类:Module

来自 Principal Neighbourhood Aggregation for Graph Nets 的 Principal Neighbourhood Aggregation 层

PNA 层由多个 PNA 塔组成。每个塔接受输入特征的一部分作为输入,并按如下方式计算消息传递。

\[h_i^(l+1) = U(h_i^l, \oplus_{(i,j)\in E}M(h_i^l, e_{i,j}, h_j^l))\]

其中 \(h_i\) 和 \(e_{i,j}\) 分别是节点特征和边特征。\ (M\) 和 \(U\) 是 MLPs,接受输入特征的拼接来计算输出特征。\(\oplus\) 表示各种聚合器(aggregator)和缩放器(scaler)的组合。聚合器从邻居聚合消息,缩放器以不同的方式对聚合消息进行缩放。\(\oplus\) 将每种组合的输出特征进行拼接。

多个塔的输出被拼接在一起,然后输入到线性混合层以获得最终输出。

参数:
  • in_size (int) – 输入特征大小;即 \(h_i^l\) 的大小。

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

  • aggregators (list of str) –

    聚合函数名称列表(每个聚合器指定一种从邻居聚合消息的方式),可从以下选项中选择:

    • mean: 邻居消息的均值

    • max: 邻居消息的最大值

    • min: 邻居消息的最小值

    • std: 邻居消息的标准差

    • var: 邻居消息的方差

    • sum: 邻居消息的总和

    • moment3, moment4, moment5: 归一化矩聚合

    \((E[(X-E[X])^n])^{1/n}\)

  • scalers (list of str) –

    缩放函数名称列表,可从以下选项中选择:

    • identity: 不进行缩放

    • amplification: 将聚合后的消息乘以 \(\log(d+1)/\delta\)

    其中 \(d\) 是节点的度。

    • attenuation: 将聚合后的消息乘以 \(\delta/\log(d+1)\)

  • delta (float) – 在训练集上计算的度相关归一化因子,由缩放器用于归一化。 \(E[\log(d+1)]\),其中 \(d\) 是训练集中每个节点的度。

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

  • num_towers (int, optional) – 使用的塔数量。默认值:1。注意 in_size 和 out_size 必须能被 num_towers 整除。

  • edge_feat_size (int, optional) – 边特征大小。默认值:0。

  • residual (bool, optional) – 布尔标志,用于确定是否为输出添加残差连接。默认值:True。如果 PNA 卷积层的 in_size 和 out_size 不相同,此标志将被强制设置为 False。

示例

>>> import dgl
>>> import torch as th
>>> from dgl.nn import PNAConv
>>>
>>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3]))
>>> feat = th.ones(6, 10)
>>> conv = PNAConv(10, 10, ['mean', 'max', 'sum'], ['identity', 'amplification'], 2.5)
>>> ret = conv(g, feat)
forward(graph, node_feat, edge_feat=None)[source]

描述

计算 PNA 层。

param graph:

图。

type graph:

DGLGraph

param node_feat:

形状为 \((N, h_n)\) 的输入特征。\ (N\) 是节点数量,\(h_n\) 必须与 in_size 相同。

type node_feat:

torch.Tensor

param edge_feat:

形状为 \((M, h_e)\) 的边特征。\ (M\) 是边数量,\(h_e\) 必须与 edge_feat_size 相同。

type edge_feat:

torch.Tensor, optional

returns:

形状为 \((N, h_n')\) 的输出节点特征,其中 \(h_n'\) 应与 out_size 相同。

rtype:

torch.Tensor