code: def __init__(
      self,
      in_channels,
      hidden_channels,
      out_channels,
      num_layers,
      dropout=0.2,
  ):
      super().__init__()
  
      self.convs = torch.nn.ModuleList()
      self.norms = torch.nn.ModuleList()
  
      self.convs.append(SAGEConv(in_channels, hidden_channels))
      self.norms.append(BatchNorm(hidden_channels))
      for i in range(1, num_layers):
          self.convs.append(SAGEConv(hidden_channels, hidden_channels))
          self.norms.append(BatchNorm(hidden_channels))
  
      self.mlp = MLP(
          in_channels=in_channels + num_layers * hidden_channels,
          hidden_channels=2 * out_channels,
          out_channels=out_channels,
          num_layers=2,
          norm="batch_norm",
          act="leaky_relu",
      )
  
      self.dropout = dropout
  
file_path: pytorch_geometric/examples/kuzu/papers_100M/train.py
imports: import multiprocessing
  import os.path
  import kuzu
  import pandas
  import torch
  import torch.nn.functional
  from tqdm import tqdm
  from torch_geometric.loader import NeighborLoader
  from torch_geometric.nn import MLP, BatchNorm, SAGEConv
label_desc: Use image node_id 1 to create a new GraphSAGE object from inherited base classes: torch.nn with example: obj = GraphSAGE(in_channels, hidden_channels, out_channels, num_layers, dropout)