class_docstr: Parameters
  -----------
  in_dim: int
      Input feature size. i.e, the number of dimensions of: math: `H^{(i)}`.
  hid_dim: int
      Hidden feature size.
  n_class: int
      Number of classes.
  S: int
      Number of Augmentation samples
  K: int
      Number of Propagation Steps
  node_dropout: float
      Dropout rate on node features.
  input_dropout: float
      Dropout rate of the input layer of a MLP
  hidden_dropout: float
      Dropout rate of the hidden layer of a MLPx
  batchnorm: bool, optional
      If True, use batch normalization.
code: def forward(self, graph, feats, training=True):
      X = feats
      S = self.S
  
      if training:  # Training Mode
          output_list = []
          for s in range(S):
              drop_feat = drop_node(X, self.dropout, True)  # Drop node
              feat = GRANDConv(
                  graph, drop_feat, self.K
              )  # Graph Convolution
              output_list.append(
                  th.log_softmax(self.mlp(feat), dim=-1)
              )  # Prediction
  
          return output_list
      else:  # Inference Mode
          drop_feat = drop_node(X, self.dropout, False)
          X = GRANDConv(graph, drop_feat, self.K)
  
          return th.log_softmax(self.mlp(X), dim=-1)
  
file_path: dgl/examples/pytorch/grand/model.py
imports: import dgl.function
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 2 for calling the GRAND obj's underlying member method code with example usage: obj.forward(graph, feats, training) and returns: output_list, th