code: def __init__(self, hetero_graph, args, aggr="mean"):
      super(HeteroGNN, self).__init__()
  
      self.aggr = aggr
      self.hidden_size = args.hidden_size
  
      self.convs1 = None
      self.convs2 = None
  
      self.bns1 = nn.ModuleDict()
      self.bns2 = nn.ModuleDict()
      self.relus1 = nn.ModuleDict()
      self.relus2 = nn.ModuleDict()
      self.post_mps = nn.ModuleDict()
  
      convs1 = generate_convs(
          hetero_graph,
          HeteroSAGEConv,
          self.hidden_size,
          first_layer=True,
      )
      convs2 = generate_convs(
          hetero_graph, HeteroSAGEConv, self.hidden_size
      )
  
      self.convs1 = HeteroGNNWrapperConv(convs1, args, aggr=self.aggr)
      self.convs2 = HeteroGNNWrapperConv(convs2, args, aggr=self.aggr)
  
      for node_type in hetero_graph.node_types:
          self.bns1[node_type] = torch.nn.BatchNorm1d(
              self.hidden_size, eps=args.eps
          )
          self.bns2[node_type] = torch.nn.BatchNorm1d(
              self.hidden_size, eps=args.eps
          )
          self.post_mps[node_type] = nn.Linear(
              self.hidden_size, hetero_graph.num_node_labels(node_type)
          )
          self.relus1[node_type] = nn.LeakyReLU()
          self.relus2[node_type] = nn.LeakyReLU()
  
imports: import copy
  import torch
  import argparse
  import deepsnap
  import numpy
  import torch.nn
  import torch.nn.functional
  import torch_geometric.nn
  from sklearn.metrics import f1_score
  from deepsnap.hetero_gnn import forward_op, HeteroSAGEConv
  from deepsnap.hetero_graph import HeteroGraph
  from torch_sparse import SparseTensor, matmul
label_desc: Use image node_id 1 to create a new HeteroGNN object from inherited base classes: torch.nn with example: obj = HeteroGNN(hetero_graph, args, aggr)