code: def __init__(self, in_channels, middle_channels, out_channels):
      super(DecoderBlock, self).__init__()
      self.conv1 = ConvBn2d(in_channels, middle_channels)
      self.conv2 = ConvBn2d(middle_channels, out_channels)
      # self.deconv = nn.ConvTranspose2d(middle_channels, out_channels, kernel_size=4, stride=2, padding=1)
      # self.bn = nn.BatchNorm2d(out_channels)
      self.spatial_gate = SpatialAttentionGate(out_channels)
      self.channel_gate = ChannelAttentionGate(out_channels)
  
imports: from torch import nn
  from torch.nn import functional
  import torch
  from torchvision import models
  from torchvision.models import resnet34, resnet101, resnet50, resnet152
  import torchvision
label_desc: Use image node_id 1 to create a new DecoderBlock object from inherited base classes: nn with example: obj = DecoderBlock(in_channels, middle_channels, out_channels)