code: def __init__(
      self,
      in_channels: int,
      out_channels: int,
      kernel_size=3,
      stride=1,
      dilation=1,
      groups=1,
      use_bias=False,
      dropout=0,
      norm="bn2d",
      act_func="relu",
  ):
      super().__init__()
  
      padding = get_same_padding(kernel_size)
      padding *= dilation
  
      self.dropout = (
          nn.Dropout2d(dropout, inplace=False) if dropout > 0 else None
      )
      self.conv = nn.Conv2d(
          in_channels,
          out_channels,
          kernel_size=(kernel_size, kernel_size),
          stride=(stride, stride),
          padding=padding,
          dilation=(dilation, dilation),
          groups=groups,
          bias=use_bias,
      )
      self.norm = build_norm(norm, num_features=out_channels)
      self.act = build_act(act_func)
  
imports: from __future__ import annotations
  import torch
  import torch.nn.functional
  from torch import nn
  from torch.cuda.amp import autocast
  from kornia.contrib.models.efficient_vit.nn.act import build_act
  from kornia.contrib.models.efficient_vit.nn.norm import build_norm
  from kornia.contrib.models.efficient_vit.utils import get_same_padding, val2tuple
label_desc: Use image node_id 1 to create a new ConvLayer object from inherited base classes: nn with example: obj = ConvLayer(in_channels, out_channels, kernel_size, stride, dilation, groups, use_bias, dropout, norm, act_func)