class_docstr: Optimizer that implements the YellowFin algorithm.
  
  See [Zhang et. al., 2017](https://arxiv.org/abs/1706.03471) for details.
docstr: Applying gradients and tune hyperparams with YellowFin.
  
  Args:
    grads_and_vars: List of (gradient, variable) pairs as returned by
      compute_gradients().
    global_step: Optional Variable to increment by one after the
      variables have been updated.
    name:  Optional name for the returned operation. Default to the
      name passed to the Optimizer constructor.
  
  Returns:
      (A group of operations)
      Variable Update with Momentum ops,
      YellowFin ops(Curvature, Variance, Distance) ops,
      SingleStep and lr_mu tuning ops,
      Step increment ops.
docstr_tok: ["Applying","gradients","and","tune","hyperparams","with","YellowFin",".","Args",":","grads_and_vars",":","List","of","(","gradient",",","variable",")","pairs","as","returned","by","compute_gradients","(",")",".","global_step",":","Optional","Variable","to","increment","by","one","after","the","variables","have","been","updated",".","name",":","Optional","name","for","the","returned","operation",".","Default","to","the","name","passed","to","the","Optimizer","constructor",".","Returns",":","(","A","group","of","operations",")","Variable","Update","with","Momentum","ops",",","YellowFin","ops","(","Curvature",",","Variance",",","Distance",")","ops",",","SingleStep","and","lr_mu","tuning","ops",",","Step","increment","ops","."]
code: def apply_gradients(
      self, grads_and_vars, global_step=None, name=None
  ):
      """Applying gradients and tune hyperparams with YellowFin.
  
      Args:
        grads_and_vars: List of (gradient, variable) pairs as returned by
          compute_gradients().
        global_step: Optional Variable to increment by one after the
          variables have been updated.
        name:  Optional name for the returned operation. Default to the
          name passed to the Optimizer constructor.
  
      Returns:
          (A group of operations)
          Variable Update with Momentum ops,
          YellowFin ops(Curvature, Variance, Distance) ops,
          SingleStep and lr_mu tuning ops,
          Step increment ops.
      """
      self._grad, self._vars = zip(
          *[(g, t) for g, t in grads_and_vars if g is not None]
      )
  
      # Var update with Momentum.
      with tf.variable_scope("apply_updates"):
          # Gradient Clipping?
          if self._clip_thresh_var is not None:
              self._grad, _ = tf.clip_by_global_norm(
                  self._grad, self._clip_thresh_var
              )
  
              apply_grad_op = self._momentum_optimizer.apply_gradients(
                  zip(self._grad, self._vars),
                  global_step=global_step,
                  name=name,
              )
          else:
              apply_grad_op = self._momentum_optimizer.apply_gradients(
                  zip(self._grad, self._vars),
                  global_step=global_step,
                  name=name,
              )
  
      # Begin lr and mu tuning.
      with tf.variable_scope("prepare_yellowFin_variables"):
          # the dependencies ideally only need to be after clip is done,
          # i.e. depends on self._grads. However, the control_dependencies
          # does not support indexed slice for sparse gradients.
          # The alternative dependencies here might be slightly slower due
          # to less parallelization.
          with tf.control_dependencies(
              [
                  apply_grad_op,
              ]
          ):
              prepare_variables_op = self._prepare_variables()
  
      with tf.variable_scope("yellowfin"):
          with tf.control_dependencies([prepare_variables_op]):
              yellowfin_op = self._yellowfin()
  
      # Update YellowFin step variable.
      with tf.control_dependencies([yellowfin_op]):
          self._increment_step_op = tf.assign_add(self._step, 1).op
  
      return tf.group(
          apply_grad_op,
          prepare_variables_op,
          yellowfin_op,
          self._increment_step_op,
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import tensorflow.compat.v1
label_desc: Use image node_id 12 for calling the YellowFinOptimizer obj's underlying member method code with example usage: obj.apply_gradients(grads_and_vars, global_step, name) and returns: tf