code: def __init__(
      self,
      n_features,
      n_hidden=[500, 100],
      n_output=20,
      activation="ReLU",
      bias=False,
      batch_norm=False,
      skip_connection=False,
  ):
      super(MLPnet, self).__init__()
      self.skip_connection = skip_connection
      self.n_output = n_output
  
      num_layers = len(n_hidden)
  
      if type(activation) == str:
          activation = [activation] * num_layers
          activation.append(None)
  
      assert (
          len(activation) == len(n_hidden) + 1
      ), "activation and n_hidden are not matched"
  
      self.layers = []
      for i in range(num_layers + 1):
          in_channels, out_channels = self.get_in_out_channels(
              i,
              num_layers,
              n_features,
              n_hidden,
              n_output,
              skip_connection,
          )
          self.layers += [
              LinearBlock(
                  in_channels,
                  out_channels,
                  bias=bias,
                  batch_norm=batch_norm,
                  activation=activation[i],
                  skip_connection=skip_connection
                  if i != num_layers
                  else False,
              )
          ]
      self.network = torch.nn.Sequential(*self.layers)
  
imports: from __future__ import division
  from __future__ import print_function
  import numpy
  import torch
  from sklearn.utils import check_array
  from sklearn.utils.validation import check_is_fitted
  from sklearn.ensemble import IsolationForest
  from sklearn.preprocessing import StandardScaler, MinMaxScaler
  from torch.utils.data import DataLoader
  from .base import BaseDetector
  from ..utils.torch_utility import get_activation_by_name
label_desc: Use image node_id 1 to create a new MLPnet object from inherited base classes: torch.nn with example: obj = MLPnet(n_features, n_hidden, n_output, activation, bias, batch_norm, skip_connection)