class_docstr: Multi-layered `Gated Graph Sequence Neural Networks
  <https://arxiv.org/pdf/1511.05493.pdf>`__.
  Support both undirected (i.e., regular) and bidirectional
  (i.e., `bi_sep` and `bi_fuse`) versions.
  Attributes
  ----------
  num_layers: int
      Number of GGNN layers.
  input_size: int
      Input feature size.
  hidden_size: int
      Should be equal to output_size.
  output_size: int
      Output feature size.
  direction_option: str
      The direction option of GGNN ('undirected', 'bi_sep' or 'bi_fuse').
      (Default: 'bi_fuse')
  n_etypes: int
      Number of edge types. n_etypes can be set to any integer if the
      direction_option is 'undirected'.
      If the direction_option is 'bi_sep' or 'bi_fuse', n_etypes will be set to 1.
  bias: bool
      If True, adds a learnable bias to the output. (Default: True)
code: def __init__(
      self,
      num_layers,
      input_size,
      hidden_size,
      output_size,
      feat_drop=0.0,
      direction_option="bi_fuse",
      n_etypes=1,
      bias=True,
      use_edge_weight=False,
  ):
      super(GGNN, self).__init__()
      self.num_layers = num_layers
      self.direction_option = direction_option
      self.input_size = input_size
      self.output_size = output_size
      self.feat_drop = nn.Dropout(feat_drop)
      self.use_edge_weight = use_edge_weight
      self.n_etypes = n_etypes
  
      assert self.output_size >= self.input_size
      assert self.output_size == hidden_size
  
      if self.direction_option == "undirected":
          self.models = GGNNLayer(
              input_size,
              output_size,
              direction_option,
              num_layers=num_layers,
              n_etypes=n_etypes,
              bias=bias,
          )
      else:
          self.models = GGNNLayer(
              input_size,
              output_size,
              direction_option,
              n_etypes=n_etypes,
              bias=bias,
          )
  
imports: import dgl
  import dgl.function
  import torch
  import torch.nn
  from torch.nn import init
  from ...data.data import GraphData
  from .base import GNNBase, GNNLayerBase
label_desc: Use image node_id 1 to create a new GGNN object from inherited base classes: GNNBase with example: obj = GGNN(num_layers, input_size, hidden_size, output_size, feat_drop, direction_option, n_etypes, bias, use_edge_weight)