code: def __init__(self, hete, hidden_size, dropout):
      super(HeteroNet, self).__init__()
      conv1, conv2 = generate_convs(hete, HeteroSAGEConv, hidden_size)
      self.conv1 = HeteroConv(conv1)
      self.conv2 = HeteroConv(conv2)
      self.relus1 = nn.ModuleDict()
      self.relus2 = nn.ModuleDict()
      self.dropouts1 = nn.ModuleDict()
      self.dropouts2 = nn.ModuleDict()
      for node_type in hete.node_types:
          self.relus1[node_type] = nn.LeakyReLU()
          self.relus2[node_type] = nn.LeakyReLU()
          self.dropouts1[node_type] = nn.Dropout(p=dropout)
          self.dropouts2[node_type] = nn.Dropout(p=dropout)
  
file_path: deepsnap/examples/node_classification_hetero/node_classification_syn_tensor.py
imports: import copy
  import torch
  import torch.nn
  import torch.nn.functional
  from utils import generate_convs, concatenate_citeseer_cora
  from deepsnap.hetero_gnn import HeteroConv, HeteroSAGEConv, forward_op, loss_op
  from torch_geometric.datasets import Planetoid
  from deepsnap.dataset import GraphDataset
  from deepsnap.batch import Batch
  from deepsnap.hetero_graph import HeteroGraph
  from torch.utils.data import DataLoader
label_desc: Use image node_id 1 to create a new HeteroNet object from inherited base classes: torch.nn with example: obj = HeteroNet(hete, hidden_size, dropout)