code: def __init__(self, n_kernels, in_feats, hiddens, out_feats):
      super(MoNet, self).__init__()
      self.pool = nn.MaxPool1d(2)
      self.layers = nn.ModuleList()
      self.readout = MaxPooling()
  
      # Input layer
      self.layers.append(GMMConv(in_feats, hiddens[0], 2, n_kernels))
  
      # Hidden layer
      for i in range(1, len(hiddens)):
          self.layers.append(
              GMMConv(hiddens[i - 1], hiddens[i], 2, n_kernels)
          )
  
      self.cls = nn.Sequential(
          nn.Linear(hiddens[-1], out_feats), nn.LogSoftmax(dim=1)
      )
  
imports: import argparse
  import time
  import dgl
  import networkx
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from coarsening import coarsen
  from coordinate import get_coordinates, z2polar
  from dgl.data import load_data, register_data_args
  from dgl.nn.pytorch.conv import ChebConv, GMMConv
  from dgl.nn.pytorch.glob import MaxPooling
  from grid_graph import grid_graph
  from torch.utils.data import DataLoader
  from torchvision import datasets, transforms
label_desc: Use image node_id 1 to create a new MoNet object from inherited base classes: nn with example: obj = MoNet(n_kernels, in_feats, hiddens, out_feats)