class_docstr: Abstract densely-connected class (private, used as implementation base).
  
  This layer implements the Bayesian variational inference analogue to
  a dense layer by assuming the `kernel` and/or the `bias` are drawn
  from distributions. By default, the layer implements a stochastic
  forward pass via sampling from the kernel and bias posteriors,
  
  ```none
  kernel, bias ~ posterior
  outputs = activation(matmul(inputs, kernel) + bias)
  ```
  
  The arguments permit separate specification of the surrogate posterior
  (`q(W|x)`), prior (`p(W)`), and divergence for both the `kernel` and `bias`
  distributions.
docstr: Returns the config of the layer.
  
  A layer config is a Python dictionary (serializable) containing the
  configuration of a layer. The same layer can be reinstantiated later
  (without its trained weights) from this configuration.
  
  Returns:
    config: A Python dictionary of class keyword arguments and their
      serialized values.
docstr_tok: ["Returns","the","config","of","the","layer",".","A","layer","config","is","a","Python","dictionary","(","serializable",")","containing","the","configuration","of","a","layer",".","The","same","layer","can","be","reinstantiated","later","(","without","its","trained","weights",")","from","this","configuration",".","Returns",":","config",":","A","Python","dictionary","of","class","keyword","arguments","and","their","serialized","values","."]
code: def get_config(self):
      """Returns the config of the layer.
  
      A layer config is a Python dictionary (serializable) containing the
      configuration of a layer. The same layer can be reinstantiated later
      (without its trained weights) from this configuration.
  
      Returns:
        config: A Python dictionary of class keyword arguments and their
          serialized values.
      """
      config = {
          "units": self.units,
          "activation": (
              tf_keras.activations.serialize(self.activation)
              if self.activation
              else None
          ),
          "activity_regularizer": tf_keras.initializers.serialize(
              self.activity_regularizer
          ),
      }
      function_keys = [
          "kernel_posterior_fn",
          "kernel_posterior_tensor_fn",
          "kernel_prior_fn",
          "kernel_divergence_fn",
          "bias_posterior_fn",
          "bias_posterior_tensor_fn",
          "bias_prior_fn",
          "bias_divergence_fn",
      ]
      for function_key in function_keys:
          function = getattr(self, function_key)
          if function is None:
              function_name = None
              function_type = None
          else:
              (
                  function_name,
                  function_type,
              ) = tfp_layers_util.serialize_function(function)
          config[function_key] = function_name
          config[function_key + "_type"] = function_type
      base_config = super(_DenseVariational, self).get_config()
      return dict(list(base_config.items()) + list(config.items()))
  
imports: import tensorflow.compat.v2
  from tensorflow_probability.python import random
  from tensorflow_probability.python.distributions import independent
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.distributions import normal
  from tensorflow_probability.python.internal import docstring_util
  from tensorflow_probability.python.internal import tf_keras
  from tensorflow_probability.python.layers import util
  from tensorflow_probability.python.util import SeedStream
label_desc: Use image node_id 5 for calling the _DenseVariational obj's underlying member method code with example usage: obj.get_config() and returns: dict