class_docstr: SharedMLP following RandLA-Net paper.
class_docstr_tok: ["SharedMLP","following","RandLA-Net","paper","."]
code: def __init__(self, *args, **kwargs):
      # BN + Act always active even at last layer.
      kwargs["plain_last"] = False
      # LeakyRelu with 0.2 slope by default.
      kwargs["act"] = kwargs.get("act", "LeakyReLU")
      kwargs["act_kwargs"] = kwargs.get("act_kwargs", lrelu02_kwargs)
      # BatchNorm with 1 - 0.99 = 0.01 momentum
      # and 1e-6 eps by defaut (tensorflow momentum != pytorch momentum)
      kwargs["norm_kwargs"] = kwargs.get("norm_kwargs", bn099_kwargs)
      super().__init__(*args, **kwargs)
  
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 SharedMLP object from inherited base classes: MLP with example: obj = SharedMLP()