EdgeWeightNorm
- class dgl.nn.pytorch.conv.EdgeWeightNorm(norm='both', eps=0.0)[source]
基类:
Module
此模块根据 GCN 中的形式,对图上正标量边权重进行归一化。
数学上,设置
norm='both'
会产生以下归一化项\[c_{ji} = (\sqrt{\sum_{k\in\mathcal{N}(j)}e_{jk}}\sqrt{\sum_{k\in\mathcal{N}(i)}e_{ki}})\]设置
norm='right'
会产生以下归一化项\[c_{ji} = (\sum_{k\in\mathcal{N}(i)}e_{ki})\]其中 \(e_{ji}\) 是从节点 \(j\) 到节点 \(i\) 的边的标量权重。
该模块返回归一化权重 \(e_{ji} / c_{ji}\)。
示例
>>> import dgl >>> import numpy as np >>> import torch as th >>> from dgl.nn import EdgeWeightNorm, GraphConv
>>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3])) >>> g = dgl.add_self_loop(g) >>> feat = th.ones(6, 10) >>> edge_weight = th.tensor([0.5, 0.6, 0.4, 0.7, 0.9, 0.1, 1, 1, 1, 1, 1, 1]) >>> norm = EdgeWeightNorm(norm='both') >>> norm_edge_weight = norm(g, edge_weight) >>> conv = GraphConv(10, 2, norm='none', weight=True, bias=True) >>> res = conv(g, feat, edge_weight=norm_edge_weight) >>> print(res) tensor([[-1.1849, -0.7525], [-1.3514, -0.8582], [-1.2384, -0.7865], [-1.9949, -1.2669], [-1.3658, -0.8674], [-0.8323, -0.5286]], grad_fn=<AddBackward0>)
- forward(graph, edge_weight)[source]
描述
计算 GCN 模型的归一化边权重。
- param graph:
图。
- type graph:
DGLGraph
- param edge_weight:
边的未归一化标量权重。形状应为 \((|E|)\)。
- type edge_weight:
torch.Tensor
- returns:
归一化的边权重。
- rtype:
torch.Tensor
- raises DGLError:
情况 1:边权重是多维的。当前此模块仅支持每条边上的标量权重。情况 2:使用
norm='both'
时,边权重包含非正值。这将触发对非正数求平方根和除法。