model.py 1.43 KB
Newer Older
1
2
3
import mxnet as mx
from mxnet import gluon

4

5
class BaseRGCN(gluon.Block):
6
7
8
9
10
11
12
13
14
15
16
17
    def __init__(
        self,
        num_nodes,
        h_dim,
        out_dim,
        num_rels,
        num_bases=-1,
        num_hidden_layers=1,
        dropout=0,
        use_self_loop=False,
        gpu_id=-1,
    ):
18
19
20
21
22
23
24
25
        super(BaseRGCN, self).__init__()
        self.num_nodes = num_nodes
        self.h_dim = h_dim
        self.out_dim = out_dim
        self.num_rels = num_rels
        self.num_bases = num_bases
        self.num_hidden_layers = num_hidden_layers
        self.dropout = dropout
Minjie Wang's avatar
Minjie Wang committed
26
        self.use_self_loop = use_self_loop
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
        self.gpu_id = gpu_id

        # create rgcn layers
        self.build_model()

    def build_model(self):
        self.layers = gluon.nn.Sequential()
        # i2h
        i2h = self.build_input_layer()
        if i2h is not None:
            self.layers.add(i2h)
        # h2h
        for idx in range(self.num_hidden_layers):
            h2h = self.build_hidden_layer(idx)
            self.layers.add(h2h)
        # h2o
        h2o = self.build_output_layer()
        if h2o is not None:
            self.layers.add(h2o)

    def build_input_layer(self):
        return None

    def build_hidden_layer(self):
        raise NotImplementedError

    def build_output_layer(self):
        return None

Minjie Wang's avatar
Minjie Wang committed
56
    def forward(self, g, h, r, norm):
57
        for layer in self.layers:
Minjie Wang's avatar
Minjie Wang committed
58
59
            h = layer(g, h, r, norm)
        return h