code: def __init__(self, g, in_dim, hidden_dim, out_dim, num_heads):
      super(GAT, self).__init__()
      self.layer1 = MultiHeadGATLayer(g, in_dim, hidden_dim, num_heads)
      # Be aware that the input dimension is hidden_dim*num_heads since
      # multiple head outputs are concatenated together. Also, only
      # one attention head in the output layer.
      self.layer2 = MultiHeadGATLayer(
          g, hidden_dim * num_heads, out_dim, 1
      )
  
imports: import os
  import torch
  import torch.nn
  import torch.nn.functional
  from dgl.nn.pytorch import GATConv
  import networkx
  from dgl import DGLGraph
  from dgl.data import citation_graph
  import time
  import numpy
label_desc: Use image node_id 1 to create a new GAT object from inherited base classes: nn with example: obj = GAT(g, in_dim, hidden_dim, out_dim, num_heads)