def _recover_shape_information(self, inputs, outputs):
    """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.
    """
    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
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.