class_docstr: An implementation of the 2D-convolution block.
  For details see this paper: `"GMAN: A Graph Multi-Attention Network for Traffic Prediction."
  <https://arxiv.org/pdf/1911.08415.pdf>`_
  
  Args:
      input_dims (int): Dimension of input.
      output_dims (int): Dimension of output.
      kernel_size (tuple or list): Size of the convolution kernel.
      stride (tuple or list, optional): Convolution strides, default (1,1).
      use_bias (bool, optional): Whether to use bias, default is True.
      activation (Callable, optional): Activation function, default is torch.nn.functional.relu.
      bn_decay (float, optional): Batch normalization momentum, default is None.
code: def __init__(
      self,
      input_dims: int,
      output_dims: int,
      kernel_size: Union[tuple, list],
      stride: Union[tuple, list] = (1, 1),
      use_bias: bool = True,
      activation: Optional[
          Callable[[torch.FloatTensor], torch.FloatTensor]
      ] = F.relu,
      bn_decay: Optional[float] = None,
  ):
      super(Conv2D, self).__init__()
      self._activation = activation
      self._conv2d = nn.Conv2d(
          input_dims,
          output_dims,
          kernel_size,
          stride=stride,
          padding=0,
          bias=use_bias,
      )
      self._batch_norm = nn.BatchNorm2d(output_dims, momentum=bn_decay)
      torch.nn.init.xavier_uniform_(self._conv2d.weight)
  
      if use_bias:
          torch.nn.init.zeros_(self._conv2d.bias)
  
imports: import math
  from typing import Union, Callable, Optional
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 1 to create a new Conv2D object from inherited base classes: nn with example: obj = Conv2D(input_dims, output_dims, kernel_size, stride, use_bias, activation, bn_decay)