class_docstr: AutoGCN.
  The model used in this automodel is GCN, i.e., the graph convolutional network from the
  `"Semi-supervised Classification with Graph Convolutional
  Networks" <https://arxiv.org/abs/1609.02907>`_ paper. The layer is
  
  .. math::
  
      \mathbf{X}^{\prime} = \mathbf{\hat{D}}^{-1/2} \mathbf{\hat{A}}
      \mathbf{\hat{D}}^{-1/2} \mathbf{X} \mathbf{\Theta},
  
  where :math:`\mathbf{\hat{A}} = \mathbf{A} + \mathbf{I}` denotes the
  adjacency matrix with inserted self-loops and
  :math:`\hat{D}_{ii} = \sum_{j=0} \hat{A}_{ij}` its diagonal degree matrix.
  
  Parameters
  ----------
  num_features: ``int``
      The dimension of features.
  
  num_classes: ``int``
      The number of classes.
  
  device: ``torch.device`` or ``str``
      The device where model will be running on.
  
  init: `bool`.
      If True(False), the model will (not) be initialized.
code: def _initialize(self):
      self._model = GCN(
          self.input_dimension,
          self.output_dimension,
          self.hyper_parameters.get("hidden"),
          self.hyper_parameters.get("act"),
          self.hyper_parameters.get("dropout", None),
          bool(self.hyper_parameters.get("add_self_loops", True)),
          bool(self.hyper_parameters.get("normalize", True)),
      ).to(self.device)
  
imports: import torch
  import torch.nn.functional
  import typing
  from torch_geometric.nn.conv import GCNConv
  import autogl.data
  from .None import register_model
  from .base import BaseAutoModel, activate_func, ClassificationSupportedSequentialModel
  from ....utils import get_logger
label_desc: Use image node_id 2 for calling the AutoGCN obj's underlying member method code with example usage: obj._initialize() without return types