class_docstr: This module can be used to attach combination of {Linear, BatchNorm, Relu, Dropout}
  layers and they are fully configurable from the config file. The module also supports
  stacking multiple MLPs.
  
  Examples:
      Linear
      Linear -> BN
      Linear -> ReLU
      Linear -> Dropout
      Linear -> BN -> ReLU -> Dropout
      Linear -> ReLU -> Dropout
      Linear -> ReLU -> Linear -> ReLU -> ...
      Linear -> Linear -> ...
      ...
  
  Accepts a 2D input tensor. Also accepts 4D input tensor of shape `N x C x 1 x 1`.
class_docstr_tok: ["This","module","can","be","used","to","attach","combination","of","{","Linear",",","BatchNorm",",","Relu",",","Dropout","}","layers","and","they","are","fully","configurable","from","the","config","file",".","The","module","also","supports","stacking","multiple","MLPs",".","Examples",":","Linear","Linear","-",">","BN","Linear","-",">","ReLU","Linear","-",">","Dropout","Linear","-",">","BN","-",">","ReLU","-",">","Dropout","Linear","-",">","ReLU","-",">","Dropout","Linear","-",">","ReLU","-",">","Linear","-",">","ReLU","-",">","...","Linear","-",">","Linear","-",">","...","...","Accepts","a","2D","input","tensor",".","Also","accepts","4D","input","tensor","of","shape","`","N","x","C","x","1","x","1","`","."]
code: def create_layers(
      model_config: AttrDict,
      dims: List[int],
      use_bn: bool = False,
      use_relu: bool = False,
      use_dropout: bool = False,
      use_bias: bool = True,
      skip_last_layer_relu_bn: bool = True,
  ):
      layers = []
      last_dim = dims[0]
      for i, dim in enumerate(dims[1:]):
          layers.append(nn.Linear(last_dim, dim, bias=use_bias))
          if i == len(dims) - 2 and skip_last_layer_relu_bn:
              break
          if use_bn:
              layers.append(
                  nn.BatchNorm1d(
                      dim,
                      eps=model_config.HEAD.BATCHNORM_EPS,
                      momentum=model_config.HEAD.BATCHNORM_MOMENTUM,
                  )
              )
          if use_relu:
              layers.append(nn.ReLU(inplace=True))
          if use_dropout:
              layers.append(nn.Dropout())
          last_dim = dim
      return layers
  
file_path: vissl/vissl/models/heads/mlp.py
imports: from typing import List
  import torch
  import torch.nn
  from vissl.config import AttrDict
  from vissl.models.heads import register_model_head
  from vissl.utils.fsdp_utils import fsdp_auto_wrap_bn, fsdp_wrapper
label_desc: Use image node_id 2 for calling the MLP obj's underlying member method code with example usage: obj.create_layers(model_config, dims, use_bn, use_relu, use_dropout, use_bias, skip_last_layer_relu_bn) and returns: layers