class_docstr: Base class of all user-defined learners. To implement your own learning
  algorithm, derive from this class and override the :meth:`update`.
  
  Certain optimizers (such as AdaGrad) require additional storage.
  This can be allocated and initialized during construction.
class_docstr_tok: ["Base","class","of","all","user-defined","learners",".","To","implement","your","own","learning","algorithm",",","derive","from","this","class","and","override","the",":","meth",":","`","update","`",".","Certain","optimizers","(","such","as","AdaGrad",")","require","additional","storage",".","This","can","be","allocated","and","initialized","during","construction","."]
docstr: Update the parameters and related state associated with this learner.
  
  Args:
      gradient_values (dict): maps :class:`~cntk.variables.Parameter`
       to a NumPy array containing the gradient for the Parameter w.r.t.
       the training objective.
      training_sample_count (int): number of samples in the minibatch
      sweep_end (bool): if the data is fed by a conforming reader, this
       indicates whether a full pass over the dataset has just occurred.
  
  Returns:
      bool: `False` to indicate that learning has stopped for all of the
      parameters associated with this learner
code: def _update(self, gradient_values, training_sample_count, sweep_end):
      """
      Update the parameters and related state associated with this learner.
  
      Args:
          gradient_values (dict): maps :class:`~cntk.variables.Parameter`
           to a NumPy array containing the gradient for the Parameter w.r.t.
           the training objective.
          training_sample_count (int): number of samples in the minibatch
          sweep_end (bool): if the data is fed by a conforming reader, this
           indicates whether a full pass over the dataset has just occurred.
  
      Returns:
          bool: `False` to indicate that learning has stopped for all of the
          parameters associated with this learner
      """
      map_if_possible(gradient_values)
  
      if self.as_numpy:
          var_nd_map = {
              var: asarray(gradient_values[var])
              for var, val in gradient_values.items()
          }
      else:
          var_nd_map = gradient_values
  
      return self.update(
          gradient_values, training_sample_count, sweep_end
      )
  
imports: from enum import Enum, unique
  import warnings
  import numpy
  import cntk.internal.utils
  from ..None import cntk_py, NDArrayView, asarray
  from cntk.internal import typemap
  from ..internal.swig_helper import map_if_possible
label_desc: Use image node_id 2 for calling the UserLearner obj's underlying member method code with example usage: obj._update(gradient_values, training_sample_count, sweep_end) and returns: self