Keras Обновление значения потерь внутри оптимизатора - PullRequest
0 голосов
/ 23 апреля 2020

Я создаю оптимизатор (https://github.com/keras-team/keras/blob/master/keras/optimizers.py), который вычисляет направление поиска, а затем пробует несколько различных длин шагов, чтобы найти, что дает наименьшие потери. Однако у меня возникают проблемы при попытке изменить длину шага в зависимости от величины самой потери. Похоже, что потеря (которая является тензором, зависящим от веса сети и данных) не может обновляться / пересчитываться более одного раза во время каждой тренировки l oop, что я считаю очень странным.

Это у меня есть соответствующий код в get_updates (self, loss, params):

    L1 = loss

    for p, direction in zip(params, directions):
        self.updates.append(K.update(p, p+length*direction))

    L2 = loss

    for p, direction in zip(params, directions):
        self.updates.append(K.update(p, tf.cond( L2<L1, lambda: p+0.5*length*direction, lambda: p))

Проблема в том, что L1 и L2 одинаковы, и что бы я ни пытался, я могу ' Потеря обновлений после обновления весов. Я также пробовал только p = p + length * direction и p.assign (), но потеря не обновляется. Кто-нибудь знает, как я могу получить обновленную стоимость потери? Обратите внимание, что я могу получить потери из предыдущего пакета / эпохи, если я сохраню значение потери и обновлю его с помощью self.updates.append (K.update (self.prev_loss, loss)), однако, поскольку данные будут меняться между партиями Я больше не работаю над той же функцией потерь, и поэтому мое сравнение между потерями, чтобы определить, должна ли длина шага быть меньше, недопустимо.

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