class_docstr: This layer randomly applies a list of modules during training.
  
  Args:
      module_list (List): List of modules
      keep_p (Optional[float]): Keep P modules from the list during training. Default: 0.8 (or 80%)
code: def forward(self, x: Tensor) -> Tensor:
      if self.training:
          indexes = [0] + sorted(
              random.sample(self.module_indexes, k=self.keep_k)
          )
          for idx in indexes:
              x = self.module_list[idx](x)
      else:
          for layer in self.module_list:
              x = layer(x)
      return x
  
file_path: ml-cvnets/cvnets/layers/random_layers.py
imports: import random
  from typing import List, Optional
  from torch import Tensor
  from cvnets.layers.base_layer import BaseLayer
  from utils.math_utils import bound_fn
label_desc: Use image node_id 2 for calling the RandomApply obj's underlying member method code with example usage: obj.forward(x) and returns: x