class_docstr: Simply returns a (trainable) variable, regardless of input.
  
  This layer implements the mathematical function `f(x) = c` where `c` is a
  constant, i.e., unchanged for all `x`. Like other Keras layers, the constant
  is `trainable`.  This layer can also be interpretted as the special case of
  `tf_keras.layers.Dense` when the `kernel` is forced to be the zero matrix
  (`tf.zeros`).
  
  #### Examples
  
  ```python
  trainable_normal = tf_keras.models.Sequential([
      tfp.layers.VariableLayer(
          shape=[3, 4, 2],
          dtype=tf.float64,
          initializer=tfp.layers.BlockwiseInitializer([
              'zeros',
              tf_keras.initializers.Constant(np.log(np.expm1(1.))),
          ], sizes=[1, 1])),
      tfp.layers.DistributionLambda(lambda t: tfd.Independent(
          tfd.Normal(loc=t[..., 0], scale=tf.math.softplus(t[..., 1])),
          reinterpreted_batch_ndims=1)),
  ])
  negloglik = lambda x, rv_x: -rv_x.log_prob(x)
  trainable_normal.compile(optimizer='adam', loss=negloglik)
  
  # trainable_normal.fit(dataset)
  
  x = trainable_normal(0.)  # `0.` ignored; like conditioning on emptyset.
  
  x.dtype
  # ==> tf.float64
  
  x.batch_shape
  # ==> [3]
  
  x.event_shape
  # ==> [4]
  
  x.mean()
  # ==> tf.reduce_mean(dataset)
  
  x.variance()
  # ==> tfp.stats.variance(dataset)
  ```
code: def call(self, _):
      x = tf.convert_to_tensor(value=self._var)
      if self.activation is None:
          return x
      return self.activation(x)
  
imports: import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import tf_keras
label_desc: Use image node_id 2 for calling the VariableLayer obj's underlying member method code with example usage: obj.call(_) and returns: self, x