Keras Custom потери сцепления различных образцов - PullRequest
0 голосов
/ 05 июля 2019

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

На практике, минимизирует ли он f (sum_i (x_i)) или вычисляет его по одной выборке за раз и, таким образом, уменьшает его до sum_i (f (x_i))?

Ниже приведен пример для функции журнала.

def custom_loss(y_true,y_pred): return K.log(1+K.mean((y_pred-y_true)*(y_pred-y_true)))

Я проверил документацию, но не смог найти точного ответа.

1 Ответ

0 голосов
/ 05 июля 2019

Это минимизирует все, что вы говорите, чтобы минимизировать.

  • Если вы хотите минимизировать журнал всей суммы, примените журнал после суммы.
  • Если вы хотите минимизировать журнал каждой выборки и суммировать ее позже, примените журнал до суммы
def log_of_sum(y_true, y_pred):
    return K.log(1 + K.mean(K.square(y_true-y_pred)))

def sum_of_logs(y_true, y_ored):
    return K.mean(K.log(1 + K.square(y_true-y_pred))) 
    #mean is optional here - you can return all the samples and Keras will handle it
    #returning all the samples allows other functions to work, like sample_weights   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...