code: def __init__(self, etypes, in_size, hid_size, out_size, n_heads=4):
      super().__init__()
      self.layers = nn.ModuleList()
      self.layers.append(
          dglnn.HeteroGraphConv(
              {
                  etype: dglnn.GATConv(
                      in_size, hid_size // n_heads, n_heads
                  )
                  for etype in etypes
              }
          )
      )
      self.layers.append(
          dglnn.HeteroGraphConv(
              {
                  etype: dglnn.GATConv(
                      hid_size, hid_size // n_heads, n_heads
                  )
                  for etype in etypes
              }
          )
      )
      self.layers.append(
          dglnn.HeteroGraphConv(
              {
                  etype: dglnn.GATConv(
                      hid_size, hid_size // n_heads, n_heads
                  )
                  for etype in etypes
              }
          )
      )
      self.dropout = nn.Dropout(0.5)
      self.linear = nn.Linear(hid_size, out_size)
  
file_path: dgl/examples/pytorch/rgat/train.py
imports: import dgl
  import dgl.function
  import dgl.nn
  import torch
  import torch.nn
  import torch.nn.functional
  import torchmetrics.functional
  import tqdm
  from dgl import apply_each
  from dgl.dataloading import DataLoader, NeighborSampler
  from ogb.nodeproppred import DglNodePropPredDataset
label_desc: Use image node_id 1 to create a new HeteroGAT object from inherited base classes: nn with example: obj = HeteroGAT(etypes, in_size, hid_size, out_size, n_heads)