code: def __init__(
      self,
      num_features,
      num_classes,
      decimation: int = 4,
      num_neighboors: int = 16,
      return_logits: bool = False,
  ):
      super().__init__()
      self.decimation = decimation
      # An option to return logits instead of log probabilities:
      self.return_logits = return_logits
      self.fc0 = Linear(in_features=num_features, out_features=8)
      # 2 DilatedResidualBlock converges better than 4 on ModelNet.
      self.block1 = DilatedResidualBlock(num_neighboors, 8, 32)
      self.block2 = DilatedResidualBlock(num_neighboors, 32, 128)
      self.mlp1 = SharedMLP([128, 128])
      self.max_agg = MaxAggregation()
      self.mlp_classif = SharedMLP([128, 32], dropout=[0.5])
      self.fc_classif = Linear(32, num_classes)
  
imports: import os.path
  import torch
  import torch.nn.functional
  from torch import Tensor
  from torch.nn import Linear
  from tqdm import tqdm
  import torch_geometric.transforms
  from torch_geometric.datasets import ModelNet
  from torch_geometric.loader import DataLoader
  from torch_geometric.nn import MLP
  from torch_geometric.nn.aggr import MaxAggregation
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.nn.pool import knn_graph
  from torch_geometric.nn.pool.decimation import decimation_indices
  from torch_geometric.typing import WITH_TORCH_CLUSTER
  from torch_geometric.utils import softmax
label_desc: Use image node_id 1 to create a new Net object from inherited base classes: torch.nn with example: obj = Net(num_features, num_classes, decimation, num_neighboors, return_logits)