code: def __init__(
      self,
      in_feats,
      n_hidden,
      n_classes,
      n_layers,
      num_heads,
      activation,
  ):
      super().__init__()
      self.n_layers = n_layers
      self.n_hidden = n_hidden
      self.n_classes = n_classes
      self.layers = nn.ModuleList()
      self.layers.append(
          dglnn.GATConv(
              (in_feats, in_feats),
              n_hidden,
              num_heads=num_heads,
              activation=activation,
          )
      )
      for i in range(1, n_layers - 1):
          self.layers.append(
              dglnn.GATConv(
                  (n_hidden * num_heads, n_hidden * num_heads),
                  n_hidden,
                  num_heads=num_heads,
                  activation=activation,
              )
          )
      self.layers.append(
          dglnn.GATConv(
              (n_hidden * num_heads, n_hidden * num_heads),
              n_classes,
              num_heads=num_heads,
              activation=None,
          )
      )
  
file_path: dgl/examples/pytorch/ogb/ogbn-products/gat/main.py
imports: import argparse
  import time
  import dgl
  import dgl.nn.pytorch
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  import torch.optim
  import tqdm
  from ogb.nodeproppred import DglNodePropPredDataset
label_desc: Use image node_id 1 to create a new GAT object from inherited base classes: nn with example: obj = GAT(in_feats, n_hidden, n_classes, n_layers, num_heads, activation)