code: def _recover_shape_information(self, inputs, outputs):
      
      batch_size_value = inputs.get_shape()[0]
      if self._data_format.startswith("NC"):
        output_shape_value = ((batch_size_value, self.output_channels) +
                              self.output_shape)
      elif self._data_format.startswith("N") and self._data_format.endswith("C"):
        output_shape_value = ((batch_size_value,) + self.output_shape +
                              (self.output_channels,))
      outputs.set_shape(output_shape_value)
      return outputs
docs: Recover output tensor shape value to enable shape inference.
  
      The batch size of `inputs` isn't preserved by the convolution op. Calculate
      what the proper output shape will be for `outputs`.
  
      Args:
        inputs: A Tensor of shape `data_format` and of type `tf.float16`,
            `tf.bfloat16` or `tf.float32`.
        outputs: A Tensor of shape `data_format` and of type `tf.float16`,
            `tf.bfloat16` or `tf.float32`. The output of `inputs` from a transpose
            convolution op.
  
      Returns:
        outputs: The passed-in `outputs` with all shape information filled in.