code: def dense(x, units, **kwargs):
    
    layer_collection = kwargs.pop("layer_collection", None)
    activations = layers().Dense(units, **kwargs)(x)
    if layer_collection:
      # We need to find the layer parameters using scope name for the layer, so
      # check that the layer is named. Otherwise parameters for different layers
      # may get mixed up.
      layer_name = tf.get_variable_scope().name
      if (not layer_name) or ("name" not in kwargs):
        raise ValueError(
            "Variable scope and layer name cannot be empty. Actual: "
            "variable_scope={}, layer name={}".format(
                layer_name, kwargs.get("name", None)))
  
      layer_name += "/" + kwargs["name"]
      layer_params = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
                                       scope=layer_name)
      assert layer_params
      if len(layer_params) == 1:
        layer_params = layer_params[0]
  
      tf.logging.info(
          "Registering dense layer to collection for tensor: {}".format(
              layer_params))
  
      x_shape = x.shape.as_list()
      if len(x_shape) == 3:
        # Handle [batch, time, depth] inputs by folding batch and time into
        # one dimension: reshaping inputs to [batchxtime, depth].
        x_2d = tf.reshape(x, [-1, x_shape[2]])
        activations_shape = activations.shape.as_list()
        activations_2d = tf.reshape(activations, [-1, activations_shape[2]])
        layer_collection.register_fully_connected_multi(
            layer_params, x_2d, activations_2d, num_uses=x_shape[1])
        activations = tf.reshape(activations_2d, activations_shape)
      else:
        layer_collection.register_fully_connected(layer_params, x, activations)
    return activations
docs: Identical to layers.dense.