GINConv

class dgl.nn.mxnet.conv.GINConv(apply_func, aggregator_type, init_eps=0, learn_eps=False)[source]

Bases: mxnet.gluon.block.Block

Graph Isomorphism layer from How Powerful are Graph Neural Networks?

\[h_i^{(l+1)} = f_\Theta \left((1 + \epsilon) h_i^{l} + \mathrm{aggregate}\left(\left\{h_j^{l}, j\in\mathcal{N}(i) \right\}\right)\right)\]
Parameters
  • apply_func (callable activation function/layer or None) – If not None, apply this function to the updated node feature, the \(f_\Theta\) in the formula.

  • aggregator_type (str) – Aggregator type to use (sum, max or mean).

  • init_eps (float, optional) – Initial \(\epsilon\) value, default: 0.

  • learn_eps (bool, optional) – If True, \(\epsilon\) will be a learnable parameter. Default: False.

Example

>>> import dgl
>>> import numpy as np
>>> import mxnet as mx
>>> from mxnet import gluon
>>> from dgl.nn import GINConv
>>>
>>> g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3]))
>>> feat = mx.nd.ones((6, 10))
>>> lin = gluon.nn.Dense(10)
>>> lin.initialize(ctx=mx.cpu(0))
>>> conv = GINConv(lin, 'max')
>>> conv.initialize(ctx=mx.cpu(0))
>>> res = conv(g, feat)
>>> res
[[ 0.44832918 -0.05283341  0.20823681  0.16020004  0.37311912 -0.03372726
-0.05716725 -0.20730163  0.14121324  0.46083626]
[ 0.44832918 -0.05283341  0.20823681  0.16020004  0.37311912 -0.03372726
-0.05716725 -0.20730163  0.14121324  0.46083626]
[ 0.44832918 -0.05283341  0.20823681  0.16020004  0.37311912 -0.03372726
-0.05716725 -0.20730163  0.14121324  0.46083626]
[ 0.44832918 -0.05283341  0.20823681  0.16020004  0.37311912 -0.03372726
-0.05716725 -0.20730163  0.14121324  0.46083626]
[ 0.44832918 -0.05283341  0.20823681  0.16020004  0.37311912 -0.03372726
-0.05716725 -0.20730163  0.14121324  0.46083626]
[ 0.22416459 -0.0264167   0.10411841  0.08010002  0.18655956 -0.01686363
-0.02858362 -0.10365082  0.07060662  0.23041813]]
<NDArray 6x10 @cpu(0)>
forward(graph, feat)[source]

Compute Graph Isomorphism Network layer.

Parameters
  • graph (DGLGraph) – The graph.

  • feat (mxnet.NDArray or a pair of mxnet.NDArray) – If a mxnet.NDArray is given, the input feature of shape \((N, D_{in})\) where \(D_{in}\) is size of input feature, \(N\) is the number of nodes. If a pair of mxnet.NDArray is given, the pair must contain two tensors of shape \((N_{in}, D_{in})\) and \((N_{out}, D_{in})\). If apply_func is not None, \(D_{in}\) should fit the input dimensionality requirement of apply_func.

Returns

The output feature of shape \((N, D_{out})\) where \(D_{out}\) is the output dimensionality of apply_func. If apply_func is None, \(D_{out}\) should be the same as input dimensionality.

Return type

mxnet.NDArray