code: def __init__(
      self,
      in_dim,
      num_classes,
      num_layers,
      hidden,
      dropout=0.5,
      pool_type="mean",
      use_jk=False,
      jk_mode="cat",
  ):
      super(GCN, self).__init__()
      num_features = in_dim
      self.conv1 = GCNConv(num_features, hidden)
      self.convs = torch.nn.ModuleList()
      for i in range(num_layers - 1):
          self.convs.append(GCNConv(hidden, hidden))
  
      self.use_jk = use_jk
      if use_jk:
          self.jk = JumpingKnowledge(jk_mode)
  
      lin_in_dim = (
          num_layers * hidden if use_jk and jk_mode == "cat" else hidden
      )
      self.lin1 = Linear(lin_in_dim, hidden)
      self.lin2 = Linear(hidden, num_classes)
      self.dropout = dropout
  
      if pool_type == "mean":
          self.pool = global_mean_pool
      elif pool_type == "sum":
          self.pool = global_add_pool
      elif pool_type == "max":
          self.pool = global_max_pool
  
file_path: DIG/dig/auggraph/method/SMixup/model/GCN.py
imports: import torch
  import torch.nn
  import torch.nn.functional
  import torch_geometric.transforms
  from torch_geometric.nn import GCNConv
  from torch_geometric.nn.glob import global_add_pool, global_mean_pool, global_max_pool
  from typing import List, Optional, Union
  from torch import Tensor
  from torch_scatter import scatter
  from torch.nn import Linear, Sequential, ReLU, BatchNorm1d
label_desc: Use image node_id 1 to create a new GCN object from inherited base classes: torch.nn with example: obj = GCN(in_dim, num_classes, num_layers, hidden, dropout, pool_type, use_jk, jk_mode)