code: def __init__(self, in_channels, out_channels):
      super(GruBlock, self).__init__()
      assert out_channels % 2 == 0
      self.conv1 = nn.Conv2D(
          in_channels, out_channels, kernel_size=1, padding=0
      )
      self.gru = nn.GRU(
          out_channels, out_channels // 2, direction="bidirectional"
      )
  
imports: import math
  import paddle
  import paddle.nn.functional
  from paddle import nn
  from collections import OrderedDict
  import sys
  import numpy
  import warnings
  import math, copy
  import cv2
  from .tps_spatial_transformer import TPSSpatialTransformer
  from .stn import STN
  from ppocr.modeling.heads.sr_rensnet_transformer import Transformer
label_desc: Use image node_id 1 to create a new GruBlock object from inherited base classes: nn with example: obj = GruBlock(in_channels, out_channels)