code: def __init__(
      self,
      node_feats,
      edge_feats,
      n_classes,
      n_layers,
      n_heads,
      n_hidden,
      edge_emb,
      activation,
      dropout,
      input_drop,
      attn_drop,
      edge_drop,
      use_attn_dst=True,
      allow_zero_in_degree=False,
      residual=False,
  ):
      super().__init__()
      self.n_layers = n_layers
      self.n_heads = n_heads
      self.n_hidden = n_hidden
      self.n_classes = n_classes
  
      self.convs = nn.ModuleList()
      self.norms = nn.ModuleList()
  
      self.node_encoder = nn.Linear(node_feats, n_hidden)
      if edge_emb > 0:
          self.edge_encoder = nn.ModuleList()
      else:
          self.edge_encoder = None
  
      for i in range(n_layers):
          in_hidden = n_heads * n_hidden if i > 0 else node_feats
          out_hidden = n_hidden
  
          if self.edge_encoder is not None:
              self.edge_encoder.append(nn.Linear(edge_feats, edge_emb))
          self.convs.append(
              GATConv(
                  in_hidden,
                  edge_emb,
                  out_hidden,
                  n_heads=n_heads,
                  attn_drop=attn_drop,
                  edge_drop=edge_drop,
                  use_attn_dst=use_attn_dst,
                  allow_zero_in_degree=allow_zero_in_degree,
              )
          )
          self.norms.append(nn.BatchNorm1d(n_heads * out_hidden))
  
      self.pred_linear = nn.Linear(n_heads * n_hidden, n_classes)
  
      self.input_drop = nn.Dropout(input_drop)
      self.dropout = nn.Dropout(dropout)
      self.activation = activation
      self.residual = residual
  
file_path: dgl/examples/pytorch/ogb/ogbn-products/gat/models.py
imports: import torch
  import torch.nn
  import torch.nn.functional
  from dgl import function
  from dgl.ops import edge_softmax
  from dgl.utils import expand_as_pair
label_desc: Use image node_id 1 to create a new GAT object from inherited base classes: nn with example: obj = GAT(node_feats, edge_feats, n_classes, n_layers, n_heads, n_hidden, edge_emb, activation, dropout, input_drop, attn_drop, edge_drop, use_attn_dst, allow_zero_in_degree, residual)