GCNNorm

class dgl.transforms.GCNNorm(eweight_name='w')[source]

Bases: BaseTransform

Apply symmetric adjacency normalization to an input graph and save the result edge weights, as described in Semi-Supervised Classification with Graph Convolutional Networks.

For a heterogeneous graph, this only applies to symmetric canonical edge types, whose source and destination node types are identical.

Parameters:

eweight_name (str, optional) – edata name to retrieve and store edge weights. The edge weights are optional.

Example

>>> import dgl
>>> import torch
>>> from dgl import GCNNorm
>>> transform = GCNNorm()
>>> g = dgl.graph(([0, 1, 2], [0, 0, 1]))

Case1: Transform an unweighted graph

>>> g = transform(g)
>>> print(g.edata['w'])
tensor([0.5000, 0.7071, 0.0000])

Case2: Transform a weighted graph

>>> g.edata['w'] = torch.tensor([0.1, 0.2, 0.3])
>>> g = transform(g)
>>> print(g.edata['w'])
tensor([0.3333, 0.6667, 0.0000])