class_docstr: Applies `Layer Normalization <https://arxiv.org/abs/1607.06450>`_ over a 4D input tensor
  
  Args:
      num_features (int): :math:`C` from an expected input of size :math:`(N, C, H, W)`
      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, C, H, W)` where :math:`N` is the batch size, :math:`C` is the number of input channels,
      :math:`H` is the input height, and :math:`W` is the input width
      - Output: same shape as the input
code: def __repr__(self):
      return "{}(num_channels={}, eps={}, affine={})".format(
          self.__class__.__name__,
          self.num_channels,
          self.eps,
          self.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 2 for calling the LayerNorm2D_NCHW obj's underlying member method code with example usage: obj.__repr__() and returns: str