Вы начинаете с создания пользовательского оптимизатора, просматривая код для текущих оптимизаторов .
Вы можете видеть, что оптимизатор может быть определен с помощью подкласса keras.optimizers.Optimizer
:
from keras.optimizers import Optimizer
class CustomOptimizer(Optimizer):
def __init__(self, custom, parameters, **kwargs):
self.custom = custom
self.parameters = parameters
# ...
super().__init__(kwargs)
def get_updates(self, loss, params):
# calculate the updates for the parameters
grads = self.get_gradients(loss, params) # as implemented in `Optimizer`
# ...
self.updates = # your updates
return self.updates
def get_config(self):
return {'custom': custom, 'parameters': parameters}
Здесь я полагаю, что вы можете вычислить производную градиентов в get_updates()
таким же образом, как реализовано get_gradients()
(взгляните на код Кераса).