code: def __init__(
      self,
      in_channels,
      hidden_channels,
      out_channels,
      normalize=False,
      lin=True,
  ):
      super().__init__()
  
      self.conv1 = DenseSAGEConv(
          in_channels, hidden_channels, normalize
      )
      self.bn1 = torch.nn.BatchNorm1d(hidden_channels)
      self.conv2 = DenseSAGEConv(
          hidden_channels, hidden_channels, normalize
      )
      self.bn2 = torch.nn.BatchNorm1d(hidden_channels)
      self.conv3 = DenseSAGEConv(
          hidden_channels, out_channels, normalize
      )
      self.bn3 = torch.nn.BatchNorm1d(out_channels)
  
      if lin is True:
          self.lin = torch.nn.Linear(
              2 * hidden_channels + out_channels, out_channels
          )
      else:
          self.lin = None
  
file_path: pytorch_geometric/examples/proteins_diff_pool.py
imports: import os.path
  import time
  from math import ceil
  import torch
  import torch.nn.functional
  import torch_geometric.transforms
  from torch_geometric.datasets import TUDataset
  from torch_geometric.loader import DenseDataLoader
  from torch_geometric.nn import DenseSAGEConv, dense_diff_pool
label_desc: Use image node_id 1 to create a new GNN object from inherited base classes: torch.nn with example: obj = GNN(in_channels, hidden_channels, out_channels, normalize, lin)