class_docstr: An optimizer which applies some "post-processing operation" per variable
  (e.g. clipping, quantization) after the gradient update.
class_docstr_tok: ["An","optimizer","which","applies","some","``","post-processing","operation","''","per","variable","(","e.g",".","clipping",",","quantization",")","after","the","gradient","update","."]
docstr: Args:
      opt (tf.train.Optimizer):
      func (tf.Variable -> tf.Operation or None): the operation needed
          to perform for this variable after the gradient update.
      colocate (boolean): colocate the function with the variable. No effect since TF 1.13.
docstr_tok: ["Args",":","opt","(","tf.train.Optimizer",")",":","func","(","tf.Variable","-",">","tf.Operation","or","None",")",":","the","operation","needed","to","perform","for","this","variable","after","the","gradient","update",".","colocate","(","boolean",")",":","colocate","the","function","with","the","variable",".","No","effect","since","TF","1.13","."]
code: def __init__(self, opt, func, colocate=True):
      """
      Args:
          opt (tf.train.Optimizer):
          func (tf.Variable -> tf.Operation or None): the operation needed
              to perform for this variable after the gradient update.
          colocate (boolean): colocate the function with the variable. No effect since TF 1.13.
      """
      super(PostProcessOptimizer, self).__init__(opt)
      self._func = func
      self._colocate = colocate
  
imports: from contextlib import contextmanager
  import tensorflow
  from ..tfutils.common import get_tf_version_tuple
  from ..compat import tfv1
  from ..utils.develop import HIDE_DOC
  from .gradproc import FilterNoneGrad, GradientProcessor
label_desc: Use image node_id 1 to create a new PostProcessOptimizer object from inherited base classes: ProxyOptimizer with example: obj = PostProcessOptimizer(opt, func, colocate)