code: def decompress_decoder(inputs,
                         hparams,
                         strides=(2, 2),
                         kernel=(3, 3),
                         name=None):
    
    with tf.variable_scope(name, default_name="decompress"):
      x = inputs
      x = tf.layers.dense(x, hparams.hidden_size, name=name + "_dense")
      x = residual_block_layer(x, hparams)
      for i in range(hparams.num_compress_steps // 2):
        j = hparams.num_compress_steps // 2 - i - 1
        with tf.variable_scope(name + "_%d" % j):
          if hparams.do_decompress_attend:
            y = compress_self_attention_layer(
                x, hparams, name="decompress_selfatt")
            x += y
          y = tf.layers.conv2d_transpose(
              x,
              hparams.hidden_size,
              kernel,
              strides=strides,
              padding="SAME",
              activation=tf.nn.relu if i > 0 else None,
              name="decompress_conv")
          x = y
      return x
docs: Decoder that decompresses 2-D inputs by 2**num_compress_steps.
  
    Args:
      inputs: Tensor of shape [batch, compress_height, compress_width, channels].
      hparams: HParams.
      strides: Tuple, strides for conv block.
      kernel: Tuple, kernel window size for conv block.
      name: string, variable scope.
  
    Returns:
      Tensor of shape [batch, height, width, hparams.hidden_size].