class_docstr: ConvolutionTranspose layer.
  
  This layer creates a ConvolutionTranspose kernel that is convolved (actually
  cross-correlated) with the layer input to produce a tensor of outputs.
  
  This layer has two learnable parameters, `kernel` and `bias`.
  - The `kernel` (aka `filters` argument of `tf.nn.conv_transpose`) is a
    `tf.Variable` with `rank + 2` `ndims` and shape given by
    `concat([filter_shape, [input_size, output_size]], axis=0)`. Argument
    `filter_shape` is either a  length-`rank` vector or expanded as one, i.e.,
    `filter_size * tf.ones(rank)` when `filter_shape` is an `int` (which we
    denote as `filter_size`).
  - The `bias` is a `tf.Variable` with `1` `ndims` and shape `[output_size]`.
  
  In summary, the shape of learnable parameters is governed by the following
  arguments: `filter_shape`, `input_size`, `output_size` and possibly `rank` (if
  `filter_shape` needs expansion).
  
  For more information on convolution layers, we recommend the following:
  - [Deconvolution Checkerboard][https://distill.pub/2016/deconv-checkerboard/]
  - [Convolution Animations][https://github.com/vdumoulin/conv_arithmetic]
  - [What are Deconvolutional Layers?][
    https://datascience.stackexchange.com/questions/6107/what-are-deconvolutional-layers]
  
  #### Examples
  
  ```python
  import tensorflow as tf
  import tensorflow_probability as tfp
  tfb = tfp.bijectors
  tfd = tfp.distributions
  tfn = tfp.experimental.nn
  
  ConvolutionTranspose1D = functools.partial(tfn.ConvolutionTranspose, rank=1)
  ConvolutionTranspose2D = tfn.ConvolutionTranspose
  ConvolutionTranspose3D = functools.partial(tfn.ConvolutionTranspose, rank=3)
  ```
class_docstr_tok: ["ConvolutionTranspose","layer",".","This","layer","creates","a","ConvolutionTranspose","kernel","that","is","convolved","(","actually","cross-correlated",")","with","the","layer","input","to","produce","a","tensor","of","outputs",".","This","layer","has","two","learnable","parameters",",","`","kernel","`","and","`","bias","`",".","-","The","`","kernel","`","(","aka","`","filters","`","argument","of","`","tf.nn.conv_transpose","`",")","is","a","`","tf.Variable","`","with","`","rank","+","2","`","`","ndims","`","and","shape","given","by","`","concat","(","[","filter_shape",",","[","input_size",",","output_size","]","]",",","axis=0",")","`",".","Argument","`","filter_shape","`","is","either","a","length-","`","rank","`","vector","or","expanded","as","one",",","i.e.",",","`","filter_size","*","tf.ones","(","rank",")","`","when","`","filter_shape","`","is","an","`","int","`","(","which","we","denote","as","`","filter_size","`",")",".","-","The","`","bias","`","is","a","`","tf.Variable","`","with","`","1","`","`","ndims","`","and","shape","`","[","output_size","]","`",".","In","summary",",","the","shape","of","learnable","parameters","is","governed","by","the","following","arguments",":","`","filter_shape","`",",","`","input_size","`",",","`","output_size","`","and","possibly","`","rank","`","(","if","`","filter_shape","`","needs","expansion",")",".","For","more","information","on","convolution","layers",",","we","recommend","the","following",":","-","[","Deconvolution","Checkerboard","]","[","https",":","\/\/distill.pub\/2016\/deconv-checkerboard\/","]","-","[","Convolution","Animations","]","[","https",":","\/\/github.com\/vdumoulin\/conv_arithmetic","]","-","[","What","are","Deconvolutional","Layers","?","]","[","https",":","\/\/datascience.stackexchange.com\/questions\/6107\/what-are-deconvolutional-layers","]","#","#","#","#","Examples","``","`","python","import","tensorflow","as","tf","import","tensorflow_probability","as","tfp","tfb","=","tfp.bijectors","tfd","=","tfp.distributions","tfn","=","tfp.experimental.nn","ConvolutionTranspose1D","=","functools.partial","(","tfn.ConvolutionTranspose",",","rank=1",")","ConvolutionTranspose2D","=","tfn.ConvolutionTranspose","ConvolutionTranspose3D","=","functools.partial","(","tfn.ConvolutionTranspose",",","rank=3",")","``","`"]
docstr: Constructs layer.
  
  Note: `data_format` is not supported since all nn layers operate on
  the rightmost column. If your channel dimension is not rightmost, use
  `tf.transpose` before calling this layer. For example, if your channel
  dimension is second from the left, the following code will move it
  rightmost:
  
  ```python
  inputs = tf.transpose(inputs, tf.concat([
      [0], tf.range(2, tf.rank(inputs)), [1]], axis=0))
  ```
  
  Args:
    input_size: ...
      In Keras, this argument is inferred from the rightmost input shape,
      i.e., `tf.shape(inputs)[-1]`. This argument specifies the size of the
      second from the rightmost dimension of both `inputs` and `kernel`.
      Default value: `None`.
    output_size: ...
      In Keras, this argument is called `filters`. This argument specifies the
      rightmost dimension size of both `kernel` and `bias`.
    filter_shape: ...
      In Keras, this argument is called `kernel_size`. This argument specifies
      the leftmost `rank` dimensions' sizes of `kernel`.
    rank: An integer, the rank of the convolution, e.g. "2" for 2D
      convolution. This argument implies the number of `kernel` dimensions,
      i.e., `kernel.shape.rank == rank + 2`.
      In Keras, this argument has the same name and semantics.
      Default value: `2`.
    strides: An integer or tuple/list of n integers, specifying the stride
      length of the convolution.
      In Keras, this argument has the same name and semantics.
      Default value: `1`.
    padding: One of `"VALID"` or `"SAME"` (case-insensitive).
      In Keras, this argument has the same name and semantics (except we don't
      support `"CAUSAL"`).
      Default value: `'VALID'`.
    dilations: An integer or tuple/list of `rank` integers, specifying the
      dilation rate to use for dilated convolution. Currently, specifying any
      `dilations` value != 1 is incompatible with specifying any `strides`
      value != 1.
      In Keras, this argument is called `dilation_rate`.
      Default value: `1`.
    output_padding: An `int` or length-`rank` tuple/list representing the
      amount of padding along the input spatial dimensions (e.g., depth,
      height, width). A single `int` indicates the same value for all spatial
      dimensions. The amount of output padding along a given dimension must be
      lower than the stride along that same dimension.  If set to `None`
      (default), the output shape is inferred.
      In Keras, this argument has the same name and semantics.
      Default value: `None` (i.e., inferred).
    method: ...
    kernel_initializer: ...
      Default value: `None` (i.e.,
      `tfp.experimental.nn.initializers.glorot_uniform()`).
    bias_initializer: ...
      Default value: `None` (i.e., `tf_keras.initializers.zeros()`).
    make_kernel_bias_fn: ...
      Default value: `tfp.experimental.nn.util.make_kernel_bias`.
    dtype: ...
      Default value: `tf.float32`.
    index_dtype: ...
    activation_fn: ...
      Default value: `None`.
    validate_args: ...
    name: ...
      Default value: `None` (i.e., `'ConvolutionTranspose'`).
docstr_tok: ["Constructs","layer",".","Note",":","`","data_format","`","is","not","supported","since","all","nn","layers","operate","on","the","rightmost","column",".","If","your","channel","dimension","is","not","rightmost",",","use","`","tf.transpose","`","before","calling","this","layer",".","For","example",",","if","your","channel","dimension","is","second","from","the","left",",","the","following","code","will","move","it","rightmost",":","``","`","python","inputs","=","tf.transpose","(","inputs",",","tf.concat","(","[","[","0","]",",","tf.range","(","2",",","tf.rank","(","inputs",")",")",",","[","1","]","]",",","axis=0",")",")","``","`","Args",":","input_size",":","...","In","Keras",",","this","argument","is","inferred","from","the","rightmost","input","shape",",","i.e.",",","`","tf.shape","(","inputs",")","[","-1","]","`",".","This","argument","specifies","the","size","of","the","second","from","the","rightmost","dimension","of","both","`","inputs","`","and","`","kernel","`",".","Default","value",":","`","None","`",".","output_size",":","...","In","Keras",",","this","argument","is","called","`","filters","`",".","This","argument","specifies","the","rightmost","dimension","size","of","both","`","kernel","`","and","`","bias","`",".","filter_shape",":","...","In","Keras",",","this","argument","is","called","`","kernel_size","`",".","This","argument","specifies","the","leftmost","`","rank","`","dimensions","'","sizes","of","`","kernel","`",".","rank",":","An","integer",",","the","rank","of","the","convolution",",","e.g",".","``","2","''","for","2D","convolution",".","This","argument","implies","the","number","of","`","kernel","`","dimensions",",","i.e.",",","`","kernel.shape.rank","==","rank","+","2","`",".","In","Keras",",","this","argument","has","the","same","name","and","semantics",".","Default","value",":","`","2","`",".","strides",":","An","integer","or","tuple\/list","of","n","integers",",","specifying","the","stride","length","of","the","convolution",".","In","Keras",",","this","argument","has","the","same","name","and","semantics",".","Default","value",":","`","1","`",".","padding",":","One","of","`","``","VALID","''","`","or","`","``","SAME","''","`","(","case-insensitive",")",".","In","Keras",",","this","argument","has","the","same","name","and","semantics","(","except","we","don't","support","`","``","CAUSAL","''","`",")",".","Default","value",":","`","'VALID","'","`",".","dilations",":","An","integer","or","tuple\/list","of","`","rank","`","integers",",","specifying","the","dilation","rate","to","use","for","dilated","convolution",".","Currently",",","specifying","any","`","dilations","`","value","!","=","1","is","incompatible","with","specifying","any","`","strides","`","value","!","=","1",".","In","Keras",",","this","argument","is","called","`","dilation_rate","`",".","Default","value",":","`","1","`",".","output_padding",":","An","`","int","`","or","length-","`","rank","`","tuple\/list","representing","the","amount","of","padding","along","the","input","spatial","dimensions","(","e.g.",",","depth",",","height",",","width",")",".","A","single","`","int","`","indicates","the","same","value","for","all","spatial","dimensions",".","The","amount","of","output","padding","along","a","given","dimension","must","be","lower","than","the","stride","along","that","same","dimension",".","If","set","to","`","None","`","(","default",")",",","the","output","shape","is","inferred",".","In","Keras",",","this","argument","has","the","same","name","and","semantics",".","Default","value",":","`","None","`","(","i.e.",",","inferred",")",".","method",":","...","kernel_initializer",":","...","Default","value",":","`","None","`","(","i.e.",",","`","tfp.experimental.nn.initializers.glorot_uniform","(",")","`",")",".","bias_initializer",":","...","Default","value",":","`","None","`","(","i.e.",",","`","tf_keras.initializers.zeros","(",")","`",")",".","make_kernel_bias_fn",":","...","Default","value",":","`","tfp.experimental.nn.util.make_kernel_bias","`",".","dtype",":","...","Default","value",":","`","tf.float32","`",".","index_dtype",":","...","activation_fn",":","...","Default","value",":","`","None","`",".","validate_args",":","...","name",":","...","Default","value",":","`","None","`","(","i.e.",",","`","'ConvolutionTranspose","'","`",")","."]
code: def __init__(
      self,
      input_size,
      output_size,  # keras::Conv::filters
      # Conv specific.
      filter_shape,  # keras::Conv::kernel_size
      rank=2,  # keras::Conv::rank
      strides=1,  # keras::Conv::strides
      padding="VALID",  # keras::Conv::padding; 'CAUSAL' not implemented.
      # keras::Conv::data_format is not implemented
      dilations=1,  # keras::Conv::dilation_rate
      output_padding=None,  # keras::ConvTranspose::output_padding
      method="auto",
      # Weights
      kernel_initializer=None,  # tfp.nn.initializers.glorot_uniform()
      bias_initializer=None,  # tf_keras.initializers.zeros()
      make_kernel_bias_fn=kernel_bias_lib.make_kernel_bias,
      dtype=tf.float32,
      index_dtype=tf.int32,
      # Misc
      activation_fn=None,
      validate_args=False,
      name=None,
  ):
      """Constructs layer.
  
      Note: `data_format` is not supported since all nn layers operate on
      the rightmost column. If your channel dimension is not rightmost, use
      `tf.transpose` before calling this layer. For example, if your channel
      dimension is second from the left, the following code will move it
      rightmost:
  
      ```python
      inputs = tf.transpose(inputs, tf.concat([
          [0], tf.range(2, tf.rank(inputs)), [1]], axis=0))
      ```
  
      Args:
        input_size: ...
          In Keras, this argument is inferred from the rightmost input shape,
          i.e., `tf.shape(inputs)[-1]`. This argument specifies the size of the
          second from the rightmost dimension of both `inputs` and `kernel`.
          Default value: `None`.
        output_size: ...
          In Keras, this argument is called `filters`. This argument specifies the
          rightmost dimension size of both `kernel` and `bias`.
        filter_shape: ...
          In Keras, this argument is called `kernel_size`. This argument specifies
          the leftmost `rank` dimensions' sizes of `kernel`.
        rank: An integer, the rank of the convolution, e.g. "2" for 2D
          convolution. This argument implies the number of `kernel` dimensions,
          i.e., `kernel.shape.rank == rank + 2`.
          In Keras, this argument has the same name and semantics.
          Default value: `2`.
        strides: An integer or tuple/list of n integers, specifying the stride
          length of the convolution.
          In Keras, this argument has the same name and semantics.
          Default value: `1`.
        padding: One of `"VALID"` or `"SAME"` (case-insensitive).
          In Keras, this argument has the same name and semantics (except we don't
          support `"CAUSAL"`).
          Default value: `'VALID'`.
        dilations: An integer or tuple/list of `rank` integers, specifying the
          dilation rate to use for dilated convolution. Currently, specifying any
          `dilations` value != 1 is incompatible with specifying any `strides`
          value != 1.
          In Keras, this argument is called `dilation_rate`.
          Default value: `1`.
        output_padding: An `int` or length-`rank` tuple/list representing the
          amount of padding along the input spatial dimensions (e.g., depth,
          height, width). A single `int` indicates the same value for all spatial
          dimensions. The amount of output padding along a given dimension must be
          lower than the stride along that same dimension.  If set to `None`
          (default), the output shape is inferred.
          In Keras, this argument has the same name and semantics.
          Default value: `None` (i.e., inferred).
        method: ...
        kernel_initializer: ...
          Default value: `None` (i.e.,
          `tfp.experimental.nn.initializers.glorot_uniform()`).
        bias_initializer: ...
          Default value: `None` (i.e., `tf_keras.initializers.zeros()`).
        make_kernel_bias_fn: ...
          Default value: `tfp.experimental.nn.util.make_kernel_bias`.
        dtype: ...
          Default value: `tf.float32`.
        index_dtype: ...
        activation_fn: ...
          Default value: `None`.
        validate_args: ...
        name: ...
          Default value: `None` (i.e., `'ConvolutionTranspose'`).
      """
      filter_shape = convolution_util.prepare_tuple_argument(
          filter_shape, rank, "filter_shape", validate_args
      )
      kernel_shape = ps.convert_to_shape_tensor(
          [ps.reduce_prod(filter_shape) * input_size, output_size]
      )
      batch_ndims = 0
      kernel, bias = make_kernel_bias_fn(
          kernel_shape,
          [output_size],
          kernel_initializer,
          bias_initializer,
          batch_ndims,
          batch_ndims,
          dtype,
      )
  
      apply_kernel_fn = _get_convolution_transpose_fn(strides, method)(
          filter_shape,
          strides,
          padding,
          rank=2,
          dilations=dilations,
          dtype=index_dtype,
          validate_args=validate_args,
      )
  
      super(ConvolutionTranspose, self).__init__(
          kernel=kernel,
          bias=bias,
          apply_kernel_fn=apply_kernel_fn,
          dtype=dtype,
          activation_fn=activation_fn,
          validate_args=validate_args,
          name=name,
      )
  
file_path: probability/tensorflow_probability/python/experimental/nn/convolutional_transpose_layers.py
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import distribution
  from tensorflow_probability.python.experimental.nn import layers
  from tensorflow_probability.python.experimental.nn import variational_base
  from tensorflow_probability.python.experimental.nn.util import convolution_util
  from tensorflow_probability.python.experimental.nn.util import kernel_bias
  from tensorflow_probability.python.internal import prefer_static
label_desc: Use image node_id 1 to create a new ConvolutionTranspose object from inherited base classes: layers_lib with example: obj = ConvolutionTranspose(input_size, output_size, filter_shape, rank, strides, padding, dilations, output_padding, method, kernel_initializer, bias_initializer, make_kernel_bias_fn, dtype, index_dtype, activation_fn, validate_args, name)