'Args:
param: same as in :class:`HyperParamSetter`.
func: ``param`` will be set by ``new_value = func(epoch_num, old_value)``.
``epoch_num`` is the number of epochs that have finished.
Example:
Decrease by a factor of 0.9 every two epochs:
.. code-block:: python
HyperParamSetterWithFunc(\'learning_rate\',
lambda e, x: x * 0.9 if e % 2 == 0 else x)'

def __init__(self, param, func):

    super(HyperParamSetterWithFunc, self).__init__(param)
    self.f = func
