PathEncoder

class dgl.nn.pytorch.graph_transformer.PathEncoder(max_len, feat_dim, num_heads=1)[source]

Bases: torch.nn.modules.module.Module

Path Encoder, as introduced in Edge Encoding of Do Transformers Really Perform Bad for Graph Representation? This module is a learnable path embedding module and encodes the shortest path between each pair of nodes as attention bias.

Parameters
  • max_len (int) – Maximum number of edges in each path to be encoded. Exceeding part of each path will be truncated, i.e. truncating edges with serial number no less than max_len.

  • feat_dim (int) – Dimension of edge features in the input graph.

  • num_heads (int, optional) – Number of attention heads if multi-head attention mechanism is applied. Default : 1.

Examples

>>> import torch as th
>>> import dgl
>>> from dgl.nn import PathEncoder
>>> u = th.tensor([0, 0, 0, 1, 1, 2, 3, 3])
>>> v = th.tensor([1, 2, 3, 0, 3, 0, 0, 1])
>>> g = dgl.graph((u, v))
>>> edata = th.rand(8, 16)
>>> path_encoder = PathEncoder(2, 16, num_heads=8)
>>> out = path_encoder(g, edata)
forward(g, edge_feat)[source]
Parameters
  • g (DGLGraph) – A DGLGraph to be encoded, which must be a homogeneous one.

  • edge_feat (torch.Tensor) – The input edge feature of shape \((E, feat_dim)\), where \(E\) is the number of edges in the input graph.

Returns

Return attention bias as path encoding, of shape \((batch_size, N, N, num_heads)\), where \(N\) is the maximum number of nodes and batch_size is the batch size of the input graph.

Return type

torch.Tensor