class_docstr: A generalized MLP model that can act as either a 2-layer MLPDecoder or a 4-layer MLPDecoder based on the include_decoder_layers parameter.
  
  Args:
      in_dim (int): the dimension of input feature.
      hidden_dim (int): the dimension of hidden layers.
      out_dim (int): the dimension of output layer.
      dropout_rate (float): the dropout rate during training.
      include_decoder_layers (bool): whether or not to include the additional layers that are part of the MLPDecoder
code: def __init__(
      self,
      in_dim,
      hidden_dim,
      out_dim,
      dropout_rate=0.1,
      include_decoder_layers=False,
  ):
      super(MLPDecoder, self).__init__()
      self.fc1 = nn.Linear(in_dim, hidden_dim)
      self.include_decoder_layers = include_decoder_layers
  
      if self.include_decoder_layers:
          self.fc2 = nn.Linear(hidden_dim, hidden_dim)
          self.fc3 = nn.Linear(hidden_dim, out_dim)
          self.fc4 = nn.Linear(out_dim, 1)
          torch.nn.init.normal_(self.fc4.weight)
          self.dropout = nn.Dropout(dropout_rate)
      else:
          self.fc2 = nn.Linear(hidden_dim, out_dim)
          self.dropout = nn.Dropout(dropout_rate)
  
imports: from typing import List, Tuple
  import numpy
  import pytorch_lightning
  import torch
  import torch.nn
  import torch.nn.functional
  from kale.embed.gripnet import GripNet
  from kale.evaluate.metrics import auprc_auroc_ap
  from kale.prepdata.graph_negative_sampling import typed_negative_sampling
  from kale.prepdata.supergraph_construct import SuperGraph
  from kale.utils.initialize_nn import bias_init, xavier_init
label_desc: Use image node_id 1 to create a new MLPDecoder object from inherited base classes: nn with example: obj = MLPDecoder(in_dim, hidden_dim, out_dim, dropout_rate, include_decoder_layers)