Как определить новую функцию оптимизации для Keras - PullRequest
0 голосов
/ 13 октября 2019

Я хотел бы реализовать для Keras новую функцию оптимизации, которая не будет основана на частных производных параметров, но также на производных этих частных производных. Как я могу продолжить?

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Фактически, после того, как я 2-3 раза посмотрел код Keras в оптимизаторе, я не только быстро перестал пытаться понять все, но мне показалось, что функция get_updates просто возвращает уже рассчитанные градиенты, гдеЯ стремлюсь получить прямой доступ к частичным функциям деривации параметров, чтобы использовать производные этих производных. Так что градиенты бесполезны ...

0 голосов
/ 13 октября 2019

Вы начинаете с создания пользовательского оптимизатора, просматривая код для текущих оптимизаторов .

Вы можете видеть, что оптимизатор может быть определен с помощью подкласса 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() (взгляните на код Кераса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...