class_docstr: The differentiable group normalization layer from the `"Towards Deeper
  Graph Neural Networks with Differentiable Group Normalization"
  <https://arxiv.org/abs/2006.06972>`_ paper, which normalizes node features
  group-wise via a learnable soft cluster assignment.
  
  .. math::
  
      \mathbf{S} = \text{softmax} (\mathbf{X} \mathbf{W})
  
  where :math:`\mathbf{W} \in \mathbb{R}^{F \times G}` denotes a trainable
  weight matrix mapping each node into one of :math:`G` clusters.
  Normalization is then performed group-wise via:
  
  .. math::
  
      \mathbf{X}^{\prime} = \mathbf{X} + \lambda \sum_{i = 1}^G
      \text{BatchNorm}(\mathbf{S}[:, i] \odot \mathbf{X})
  
  Args:
      in_channels (int): Size of each input sample :math:`F`.
      groups (int): The number of groups :math:`G`.
      lamda (float, optional): The balancing factor :math:`\lambda` between
          input embeddings and normalized embeddings. (default: :obj:`0.01`)
      eps (float, optional): A value added to the denominator for numerical
          stability. (default: :obj:`1e-5`)
      momentum (float, optional): The value used for the running mean and
          running variance computation. (default: :obj:`0.1`)
      affine (bool, optional): If set to :obj:`True`, this module has
          learnable affine parameters :math:`\gamma` and :math:`\beta`.
          (default: :obj:`True`)
      track_running_stats (bool, optional): If set to :obj:`True`, this
          module tracks the running mean and variance, and when set to
          :obj:`False`, this module does not track such statistics and always
          uses batch statistics in both training and eval modes.
          (default: :obj:`True`)
code: def __init__(
      self,
      in_channels: int,
      groups: int,
      lamda: float = 0.01,
      eps: float = 1e-5,
      momentum: float = 0.1,
      affine: bool = True,
      track_running_stats: bool = True,
  ):
      super().__init__()
  
      self.in_channels = in_channels
      self.groups = groups
      self.lamda = lamda
  
      self.lin = Linear(in_channels, groups, bias=False)
      self.norm = BatchNorm1d(
          groups * in_channels,
          eps,
          momentum,
          affine,
          track_running_stats,
      )
  
      self.reset_parameters()
  
file_path: pytorch_geometric/torch_geometric/nn/norm/diff_group_norm.py
imports: import torch
  from torch import Tensor
  from torch.nn import BatchNorm1d, Linear
label_desc: Use image node_id 1 to create a new DiffGroupNorm object from inherited base classes: torch.nn with example: obj = DiffGroupNorm(in_channels, groups, lamda, eps, momentum, affine, track_running_stats)