code: def __init__(
      self, hidden_dim=420, out_dim=420, dropout=0.2, n_layers=4
  ):
      super().__init__()
  
      self.embedding_h = AtomEncoder(emb_dim=hidden_dim)
      self.aggregators = [
          aggregate_mean,
          aggregate_sum,
          aggregate_max,
          aggregate_dir_dx,
      ]
  
      self.layers = nn.ModuleList(
          [
              DGNLayer(
                  in_dim=hidden_dim,
                  out_dim=hidden_dim,
                  dropout=dropout,
                  aggregators=self.aggregators,
              )
              for _ in range(n_layers - 1)
          ]
      )
      self.layers.append(
          DGNLayer(
              in_dim=hidden_dim,
              out_dim=out_dim,
              dropout=dropout,
              aggregators=self.aggregators,
          )
      )
  
      # 128 out dim since ogbg-molpcba has 128 tasks
      self.MLP_layer = MLPReadout(out_dim, 128)
  
imports: import argparse
  import random
  import dgl
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  import torch.optim
  from dgl.dataloading import GraphDataLoader
  from ogb.graphproppred import Evaluator
  from ogb.graphproppred.mol_encoder import AtomEncoder
  from preprocessing import prepare_dataset
  from torch.utils.data import Dataset
  from tqdm import tqdm
label_desc: Use image node_id 1 to create a new DGNNet object from inherited base classes: nn with example: obj = DGNNet(hidden_dim, out_dim, dropout, n_layers)