DGNConv
- class dgl.nn.pytorch.conv.DGNConv(in_size, out_size, aggregators, scalers, delta, dropout=0.0, num_towers=1, edge_feat_size=0, residual=True)[source]
基础类:
PNAConv
方向图网络层来自 方向图网络
DGN 根据向量场 \(F\) 引入了两个特殊的方向聚合器,该向量场被定义为图拉普拉斯低频特征向量的梯度。
方向平均聚合器定义为 \(h_i' = \sum_{j\in\mathcal{N}(i)}\frac{|F_{i,j}|\cdot h_j}{||F_{i,:}||_1+\epsilon}\)
方向导数聚合器定义为 \(h_i' = \sum_{j\in\mathcal{N}(i)}\frac{F_{i,j}\cdot h_j}{||F_{i,:}||_1+\epsilon} -h_i\cdot\sum_{j\in\mathcal{N}(i)}\frac{F_{i,j}}{||F_{i,:}||_1+\epsilon}\)
\(\epsilon\) 是用于保持计算数值稳定的无穷小量。
- Parameters:
in_size (int) – Input feature size; i.e. the size of \(h_i^l\).
out_size (int) – Output feature size; i.e. the size of \(h_i^{l+1}\).
聚合函数名称列表(每个聚合器指定了一种聚合邻居消息的方式),可从以下选项中选择:
mean
: 邻居消息的平均值max
: 邻居消息的最大值min
: 邻居消息的最小值std
: 邻居消息的标准差var
: 邻居消息的方差sum
: 邻居消息的总和moment3
,moment4
,moment5
: 归一化矩聚合
\((E[(X-E[X])^n])^{1/n}\)
dir{k}-av
: 由第k个最小特征向量定义的方向平均聚合
k可以从1, 2, 3中选择。
dir{k}-dx
: 由第k个最小特征向量定义的方向导数聚合
k可以从1, 2, 3中选择。
注意,使用方向聚合需要在输入图上进行LaplacianPE变换以计算特征向量(PE大小必须大于等于上述k)。
缩放函数名称列表,从以下选项中选择:
identity
: 不进行缩放amplification
: 将聚合的消息乘以 \(\log(d+1)/\delta\),
其中 \(d\) 是节点的入度。
attenuation
: 将聚合的消息乘以 \(\delta/\log(d+1)\)
delta (float) – 在训练集上计算的与入度相关的归一化因子,用于归一化的缩放器。 \(E[\log(d+1)]\),其中 \(d\) 是训练集中每个节点的入度。
dropout (float, optional) – The dropout ratio. Default: 0.0.
num_towers (int, optional) – The number of towers used. Default: 1. Note that in_size and out_size must be divisible by num_towers.
edge_feat_size (int, optional) – The edge feature size. Default: 0.
residual (bool, optional) – 布尔标志,用于确定是否为输出添加残差连接。默认值:True。如果DGN卷积层的in_size和out_size不相同,此标志将强制设置为False。
示例
>>> import dgl >>> import torch as th >>> from dgl.nn import DGNConv >>> from dgl import LaplacianPE >>> >>> # DGN requires precomputed eigenvectors, with 'eig' as feature name. >>> transform = LaplacianPE(k=3, feat_name='eig') >>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3])) >>> g = transform(g) >>> eig = g.ndata['eig'] >>> feat = th.ones(6, 10) >>> conv = DGNConv(10, 10, ['dir1-av', 'dir1-dx', 'sum'], ['identity', 'amplification'], 2.5) >>> ret = conv(g, feat, eig_vec=eig)
- forward(graph, node_feat, edge_feat=None, eig_vec=None)[source]
Description
计算DGN层。
- param graph:
图表。
- type graph:
DGLGraph
- param node_feat:
The input feature of shape \((N, h_n)\). \(N\) is the number of nodes, and \(h_n\) must be the same as in_size.
- type node_feat:
torch.Tensor
- param edge_feat:
The edge feature of shape \((M, h_e)\). \(M\) is the number of edges, and \(h_e\) must be the same as edge_feat_size.
- type edge_feat:
torch.Tensor, 可选的
- param eig_vec:
图形拉普拉斯的最小非平凡特征向量,形状为 \((N, K)\)。 仅当
aggregators
包含方向性聚合器时才需要。- type eig_vec:
torch.Tensor, 可选的
- returns:
The output node feature of shape \((N, h_n')\) where \(h_n'\) should be the same as out_size.
- rtype:
torch.Tensor