class_docstr: Applies `Layer Normalization <https://arxiv.org/abs/1607.06450>`_ over a input tensor
  
  Args:
      normalized_shape (int or list or torch.Size): input shape from an expected input
          of size
  
          .. math::
              [* \times \text{normalized\_shape}[0] \times \text{normalized\_shape}[1]
                  \times \ldots \times \text{normalized\_shape}[-1]]
  
          If a single integer is used, it is treated as a singleton list, and this module will
          normalize over the last dimension which is expected to be of that specific size.
      eps (Optional, float): Value added to the denominator for numerical stability. Default: 1e-5
      elementwise_affine (bool): If ``True``, use learnable affine parameters. Default: ``True``
  
  Shape:
      - Input: :math:`(N, *)` where :math:`N` is the batch size
      - Output: same shape as the input
code: def __init__(
      self,
      normalized_shape: Union[int, List[int], Size],
      eps: Optional[float] = 1e-5,
      elementwise_affine: Optional[bool] = True,
      *args,
      **kwargs,
  ):
      super().__init__(
          normalized_shape=normalized_shape,
          eps=eps,
          elementwise_affine=elementwise_affine,
      )
  
file_path: ml-cvnets/cvnets/layers/normalization/layer_norm.py
imports: from typing import List, Optional, Union
  import torch
  from torch import Size, Tensor, nn
  from cvnets.layers.normalization import register_norm_fn
label_desc: Use image node_id 1 to create a new LayerNorm object from inherited base classes: nn with example: obj = LayerNorm(normalized_shape, eps, elementwise_affine)