'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.'

def __init__(self, opt, func, colocate=True):

    super(PostProcessOptimizer, self).__init__(opt)
    self._func = func
    self._colocate = colocate
