class_docstr: Entity classification class for RGCN
  Parameters
  ----------
  device : int
      Device to run the layer.
  num_nodes : int
      Number of nodes.
  h_dim : int
      Hidden dim size.
  out_dim : int
      Output dim size.
  num_rels : int
      Numer of relation types.
  num_bases : int
      Number of bases. If is none, use number of relations.
  num_hidden_layers : int
      Number of hidden RelGraphConv Layer
  dropout : float
      Dropout
  use_self_loop : bool
      Use self loop if True, default False.
class_docstr_tok: ["Entity","classification","class","for","RGCN","Parameters","--","--","--","--","--","device",":","int","Device","to","run","the","layer",".","num_nodes",":","int","Number","of","nodes",".","h_dim",":","int","Hidden","dim","size",".","out_dim",":","int","Output","dim","size",".","num_rels",":","int","Numer","of","relation","types",".","num_bases",":","int","Number","of","bases",".","If","is","none",",","use","number","of","relations",".","num_hidden_layers",":","int","Number","of","hidden","RelGraphConv","Layer","dropout",":","float","Dropout","use_self_loop",":","bool","Use","self","loop","if","True",",","default","False","."]
code: def forward(self, blocks, feats, norm=None):
      if blocks is None:
          # full graph training
          blocks = [self.g] * len(self.layers)
      h = feats
      for layer, block in zip(self.layers, blocks):
          block = block.to(self.device)
          h = layer(block, h, block.edata["etype"], block.edata["norm"])
      return h
  
imports: import itertools
  import time
  import dgl
  import dgl.nn.pytorch
  import torch
  import torch.multiprocessing
  import torch.nn
  import torch.nn.functional
  import torch.optim
  from dgl.nn import RelGraphConv
  from torch.utils.data import DataLoader
  from ..None import utils
label_desc: Use image node_id 2 for calling the EntityClassify obj's underlying member method code with example usage: obj.forward(blocks, feats, norm) and returns: h