class_docstr: Dense layer with random `kernel` and `bias`.
  
  This layer uses variational inference to fit a "surrogate" posterior to the
  distribution over both the `kernel` matrix and the `bias` terms which are
  otherwise used in a manner similar to `tf_keras.layers.Dense`.
  
  This layer fits the "weights posterior" according to the following generative
  process:
  
  ```none
  [K, b] ~ Prior()
  M = matmul(X, K) + b
  Y ~ Likelihood(M)
  ```
code: def call(self, inputs):
      dtype = tf.as_dtype(self.dtype or tf_keras.backend.floatx())
      inputs = tf.cast(inputs, dtype, name="inputs")
  
      q = self._posterior(inputs)
      r = self._prior(inputs)
      self.add_loss(self._kl_divergence_fn(q, r))
  
      w = tf.convert_to_tensor(value=q)
      prev_units = self.input_spec.axes[-1]
      if self.use_bias:
          split_sizes = [prev_units * self.units, self.units]
          kernel, bias = tf.split(w, split_sizes, axis=-1)
      else:
          kernel, bias = w, None
  
      kernel = tf.reshape(
          kernel,
          shape=tf.concat(
              [
                  tf.shape(kernel)[:-1],
                  [prev_units, self.units],
              ],
              axis=0,
          ),
      )
      outputs = tf.matmul(inputs, kernel)
  
      if self.use_bias:
          outputs = tf.nn.bias_add(outputs, bias)
  
      if self.activation is not None:
          outputs = self.activation(
              outputs
          )  # pylint: disable=not-callable
  
      return outputs
  
file_path: probability/tensorflow_probability/python/layers/dense_variational_v2.py
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.internal import tf_keras
label_desc: Use image node_id 3 for calling the DenseVariational obj's underlying member method code with example usage: obj.call(inputs) and returns: outputs