code: def __init__(
      self,
      pdc,
      in_channels,
      out_channels,
      kernel_size,
      stride=1,
      padding=0,
      dilation=1,
      groups=1,
      bias=False,
  ):
      super(Conv2d, self).__init__()
      if in_channels % groups != 0:
          raise ValueError("in_channels must be divisible by groups")
      if out_channels % groups != 0:
          raise ValueError("out_channels must be divisible by groups")
      self.in_channels = in_channels
      self.out_channels = out_channels
      self.kernel_size = kernel_size
      self.stride = stride
      self.padding = padding
      self.dilation = dilation
      self.groups = groups
      self.weight = nn.Parameter(
          torch.Tensor(
              out_channels,
              in_channels // groups,
              kernel_size,
              kernel_size,
          )
      )
      if bias:
          self.bias = nn.Parameter(torch.Tensor(out_channels))
      else:
          self.register_parameter("bias", None)
      self.reset_parameters()
      self.pdc = pdc
  
imports: import os
  import math
  import torch
  import numpy
  import torch.nn
  import torch.nn.functional
  from typing import Optional
  from cftool.cv import to_uint8
  from ....parameters import OPT
label_desc: Use image node_id 1 to create a new Conv2d object from inherited base classes: nn with example: obj = Conv2d(pdc, in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias)