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)[源码]
基类:
PNAConv
来自 Directional Graph Networks 的 定向图网络层
DGN 根据向量场 \(F\) 引入了两种特殊的定向聚合器,向量场 \(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\) 是无穷小量,用于保持计算的数值稳定性。
- 参数:
in_size (int) – 输入特征大小;即 \(h_i^l\) 的大小。
out_size (int) – 输出特征大小;即 \(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) – Dropout 比率。默认值:0.0。
num_towers (int, optional) – 使用的 tower 数量。默认值:1。注意 in_size 和 out_size 必须能被 num_towers 整除。
edge_feat_size (int, optional) – 边特征大小。默认值: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)[源码]
描述
计算 DGN 层。
- 参数 graph:
图。
- 类型 graph:
DGLGraph
- 参数 node_feat:
输入特征,形状为 \((N, h_n)\)。\(N\) 是节点数量,\(h_n\) 必须与 in_size 相同。
- 类型 node_feat:
torch.Tensor
- 参数 edge_feat:
边特征,形状为 \((M, h_e)\)。\(M\) 是边数量,\(h_e\) 必须与 edge_feat_size 相同。
- 类型 edge_feat:
torch.Tensor, optional
- 参数 eig_vec:
图拉普拉斯算子的 K 个最小非平凡特征向量,形状为 \((N, K)\)。仅当
aggregators
包含定向聚合器时需要此参数。- 类型 eig_vec:
torch.Tensor, optional
- 返回:
输出节点特征,形状为 \((N, h_n')\),其中 \(h_n'\) 应与 out_size 相同。
- 返回类型:
torch.Tensor