docs: def variable(name, shape=None, dtype=tf.float32, initializer=None,
               regularizer=None, trainable=True, collections=None, device='',
               restore=True):
    """Gets an existing variable with these parameters or creates a new one.
  
      It also add itself to a group with its name.
  
    Args:
      name: the name of the new or existing variable.
      shape: shape of the new or existing variable.
      dtype: type of the new or existing variable (defaults to `DT_FLOAT`).
      initializer: initializer for the variable if one is created.
      regularizer: a (Tensor -> Tensor or None) function; the result of
          applying it on a newly created variable will be added to the collection
          GraphKeys.REGULARIZATION_LOSSES and can be used for regularization.
      trainable: If `True` also add the variable to the graph collection
        `GraphKeys.TRAINABLE_VARIABLES` (see tf.Variable).
      collections: A list of collection names to which the Variable will be added.
        Note that the variable is always also added to the tf.GraphKeys.GLOBAL_VARIABLES
        and MODEL_VARIABLES collections.
      device: Optional device to place the variable. It can be an string or a
        function that is called to get the device for the variable.
      restore: whether the variable should be added to the
        VARIABLES_TO_RESTORE collection.
  
    Returns:
      The created or existing variable.
    """
    collections = list(collections or [])
  
    # Make sure variables are added to tf.GraphKeys.GLOBAL_VARIABLES and MODEL_VARIABLES
    collections += [tf.GraphKeys.GLOBAL_VARIABLES, MODEL_VARIABLES]
    # Add to VARIABLES_TO_RESTORE if necessary
    if restore:
      collections.append(VARIABLES_TO_RESTORE)
    # Remove duplicates
    collections = set(collections)
    # Get the device for the variable.
    with tf.device(variable_device(device, name)):
      return tf.get_variable(name, shape=shape, dtype=dtype,
                             initializer=initializer, regularizer=regularizer,
                             trainable=trainable, collections=collections)