docstr: Defines main part of the TabNet network without the embedding layers.
  
  Parameters
  ----------
  input_dim : int
      Number of features
  output_dim : int or list of int for multi task classification
      Dimension of network output
      examples : one for regression, 2 for binary classification etc...
  n_d : int
      Dimension of the prediction  layer (usually between 4 and 64)
  n_steps : int
      Number of successive steps in the network (usually between 3 and 10)
  gamma : float
      Float above 1, scaling factor for attention updates (usually between 1.0 to 2.0)
  n_independent : int
      Number of independent GLU layer in each GLU block (default 1)
  n_shared : int
      Number of independent GLU layer in each GLU block (default 1)
  virtual_batch_size : int
      Batch size for Ghost Batch Normalization
  momentum : float
      Float value between 0 and 1 which will be used for momentum in all batch norm
docstr_tok: ["Defines","main","part","of","the","TabNet","network","without","the","embedding","layers",".","Parameters","--","--","--","--","--","input_dim",":","int","Number","of","features","output_dim",":","int","or","list","of","int","for","multi","task","classification","Dimension","of","network","output","examples",":","one","for","regression",",","2","for","binary","classification","etc","...","n_d",":","int","Dimension","of","the","prediction","layer","(","usually","between","4","and","64",")","n_steps",":","int","Number","of","successive","steps","in","the","network","(","usually","between","3","and","10",")","gamma",":","float","Float","above","1",",","scaling","factor","for","attention","updates","(","usually","between","1.0","to","2.0",")","n_independent",":","int","Number","of","independent","GLU","layer","in","each","GLU","block","(","default","1",")","n_shared",":","int","Number","of","independent","GLU","layer","in","each","GLU","block","(","default","1",")","virtual_batch_size",":","int","Batch","size","for","Ghost","Batch","Normalization","momentum",":","float","Float","value","between","0","and","1","which","will","be","used","for","momentum","in","all","batch","norm"]
code: def __init__(
      self,
      input_dim,
      n_d=8,
      n_steps=3,
      n_independent=1,
      n_shared=1,
      virtual_batch_size=128,
      momentum=0.02,
  ):
      """
      Defines main part of the TabNet network without the embedding layers.
  
      Parameters
      ----------
      input_dim : int
          Number of features
      output_dim : int or list of int for multi task classification
          Dimension of network output
          examples : one for regression, 2 for binary classification etc...
      n_d : int
          Dimension of the prediction  layer (usually between 4 and 64)
      n_steps : int
          Number of successive steps in the network (usually between 3 and 10)
      gamma : float
          Float above 1, scaling factor for attention updates (usually between 1.0 to 2.0)
      n_independent : int
          Number of independent GLU layer in each GLU block (default 1)
      n_shared : int
          Number of independent GLU layer in each GLU block (default 1)
      virtual_batch_size : int
          Batch size for Ghost Batch Normalization
      momentum : float
          Float value between 0 and 1 which will be used for momentum in all batch norm
      """
      super(TabNetDecoder, self).__init__()
      self.input_dim = input_dim
      self.n_d = n_d
      self.n_steps = n_steps
      self.n_independent = n_independent
      self.n_shared = n_shared
      self.virtual_batch_size = virtual_batch_size
  
      self.feat_transformers = torch.nn.ModuleList()
  
      if self.n_shared > 0:
          shared_feat_transform = torch.nn.ModuleList()
          for i in range(self.n_shared):
              shared_feat_transform.append(
                  Linear(n_d, 2 * n_d, bias=False)
              )
      else:
          shared_feat_transform = None
  
      for step in range(n_steps):
          transformer = FeatTransformer(
              n_d,
              n_d,
              shared_feat_transform,
              n_glu_independent=self.n_independent,
              virtual_batch_size=self.virtual_batch_size,
              momentum=momentum,
          )
          self.feat_transformers.append(transformer)
  
      self.reconstruction_layer = Linear(
          n_d, self.input_dim, bias=False
      )
      initialize_non_glu(self.reconstruction_layer, n_d, self.input_dim)
  
imports: import torch
  from torch.nn import Linear, BatchNorm1d, ReLU
  import numpy
  from pytorch_tabnet import sparsemax
label_desc: Use image node_id 1 to create a new TabNetDecoder object from inherited base classes: torch.nn with example: obj = TabNetDecoder(input_dim, n_d, n_steps, n_independent, n_shared, virtual_batch_size, momentum)