class_docstr: Fully factorized distribution based on neural network cumulative.
  
  This is a flexible, nonparametric probability density model, described in
  appendix 6.1 of the paper:
  
  > "Variational image compression with a scale hyperprior"<br />
  > J. Ballé, D. Minnen, S. Singh, S. J. Hwang, N. Johnston<br />
  > https://openreview.net/forum?id=rkcQFMZRb
  
  but *without* convolution with a unit-width uniform
  density, as described in appendix 6.2 of the same paper. Please cite the paper
  if you use this code for scientific work.
  
  This is a scalar distribution (i.e., its `event_shape` is always length 0),
  and the density object always creates its own `tf.Variable`s representing the
  trainable distribution parameters.
class_docstr_tok: ["Fully","factorized","distribution","based","on","neural","network","cumulative",".","This","is","a","flexible",",","nonparametric","probability","density","model",",","described","in","appendix","6.1","of","the","paper",":",">","``","Variational","image","compression","with","a","scale","hyperprior","''","<","br","\/",">",">","J.","Ball\u00e9",",","D.","Minnen",",","S.","Singh",",","S.","J.","Hwang",",","N.","Johnston","<","br","\/",">",">","https",":","\/\/openreview.net\/forum","?","id=rkcQFMZRb","but","*","without","*","convolution","with","a","unit-width","uniform","density",",","as","described","in","appendix","6.2","of","the","same","paper",".","Please","cite","the","paper","if","you","use","this","code","for","scientific","work",".","This","is","a","scalar","distribution","(","i.e.",",","its","`","event_shape","`","is","always","length","0",")",",","and","the","density","object","always","creates","its","own","`","tf.Variable","`","s","representing","the","trainable","distribution","parameters","."]
docstr: Creates the variables representing the parameters of the distribution.
docstr_tok: ["Creates","the","variables","representing","the","parameters","of","the","distribution","."]
code: def _make_variables(self):
      """Creates the variables representing the parameters of the distribution."""
      channels = self.batch_shape.num_elements()
      filters = (1,) + self.num_filters + (1,)
      scale = self.init_scale ** (1 / (len(self.num_filters) + 1))
      self._matrices = []
      self._biases = []
      self._factors = []
  
      for i in range(len(self.num_filters) + 1):
  
          def matrix_initializer(i=i):
              init = log_expm1(1 / scale / filters[i + 1])
              init = tf.cast(init, dtype=self.dtype)
              init = tf.broadcast_to(
                  init, (channels, filters[i + 1], filters[i])
              )
              return init
  
          matrix = tf.Variable(
              matrix_initializer, name="matrix_{}".format(i)
          )
          self._matrices.append(matrix)
  
          def bias_initializer(i=i):
              return tf.random.uniform(
                  (channels, filters[i + 1], 1),
                  -0.5,
                  0.5,
                  dtype=self.dtype,
              )
  
          bias = tf.Variable(bias_initializer, name="bias_{}".format(i))
          self._biases.append(bias)
  
          if i < len(self.num_filters):
  
              def factor_initializer(i=i):
                  return tf.zeros(
                      (channels, filters[i + 1], 1), dtype=self.dtype
                  )
  
              factor = tf.Variable(
                  factor_initializer, name="factor_{}".format(i)
              )
              self._factors.append(factor)
  
imports: import tensorflow
  import tensorflow_probability
  from tensorflow_compression.python.distributions import helpers
  from tensorflow_compression.python.distributions import uniform_noise
label_desc: Use image node_id 4 for calling the DeepFactorized obj's underlying member method code with example usage: obj._make_variables() and returns: init, tf, tf