Нужна пользовательская функция потери, которая использует оператор if - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь обучить DNN, который выводит 3 значения (x,y,z), где x и y - координаты объекта, который я ищу, а z - вероятность того, что объект присутствует

Мне нужна функция потери:

Если z_true<0.5 меня не волнуют значения x и y, то ошибка должна быть равна (0, 0, sqr(z_true - z_pred))

в противном случае ошибка должна быть как (sqr(x_true - x_pred), sqr(y_true - y_pred), sqr(z_true - z_pred))

Я борюсь со смешиванием тензоров и операторов if.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Использование switch из бэкэнда Keras: https://keras.io/backend/#switch Это похоже на tf.cond Как создать собственный убыток в Керасе, описано здесь: Сделать пользовательский убыток в керасе

0 голосов
/ 11 января 2019

Возможно, этот пример пользовательской функции потери поможет вам начать работу. Он показывает, как можно смешивать тензоры с операторами if.

 def conditional_loss_function(l):
        def loss(y_true, y_pred):
            if l == 0: 
                return loss_funtion1(y_true, y_pred)
            else: 
                return loss_funtion2(y_true, y_pred)
        return loss

 model.compile(loss=conditional_loss_function(l), optimizer=...)
...