code: def _make_deconv_layer(self, num_layers, num_filters, num_kernels):
      assert num_layers == len(
          num_filters
      ), "ERROR: num_deconv_layers is different from len(num_deconv_filters)"
      assert num_layers == len(
          num_kernels
      ), "ERROR: num_deconv_layers is different from len(num_deconv_filters)"
  
      layer = nn.HybridSequential(prefix="")
      with layer.name_scope():
          for i in range(num_layers):
              kernel, padding, output_padding = self._get_deconv_cfg(
                  num_kernels[i]
              )
  
              planes = num_filters[i]
              layer.add(
                  nn.Conv2DTranspose(
                      channels=planes,
                      kernel_size=kernel,
                      strides=2,
                      padding=padding,
                      output_padding=output_padding,
                      use_bias=self.deconv_with_bias,
                      weight_initializer=initializer.Normal(0.001),
                      bias_initializer=initializer.Zero(),
                  )
              )
              layer.add(
                  gcv.nn.BatchNormCudnnOff(
                      gamma_initializer=initializer.One(),
                      beta_initializer=initializer.Zero(),
                  )
              )
              layer.add(nn.Activation("relu"))
              self.inplanes = planes
  
      return layer
  
file_path: gluon-cv/gluoncv/model_zoo/simple_pose/simple_pose_resnet.py
imports: from __future__ import division
  from mxnet.context import cpu
  from mxnet.gluon.block import HybridBlock
  from mxnet.gluon import nn
  from mxnet import initializer
  import gluoncv
label_desc: Use image node_id 3 for calling the SimplePoseResNet obj's underlying member method code with example usage: obj._make_deconv_layer(num_layers, num_filters, num_kernels) and returns: layer