Как определить пользовательскую функцию потерь для многомерной цели - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю с Tensorflow 2.0 и использую обычный последовательный слой.

Я пытаюсь определить пользовательские функции потерь, которые выполняют следующее:

  • принимает некоторые элементы ввода
  • вычисляет их сумму и инвертирует результат
  • умножает результат на часть y_pred
  • , ограничивая результат как можно более близким к 1

Таким образом, функция потерь будет L () = MSE () + (описано выше)

Мой код следующий:

def custom_loss_wrapper(input_train):
    @tf.function
    def summing(row):
        return tf.math.reduce_sum(row, 1,keepdims=True)

    @tf.function
    def custom_loss(y_true, y_pred):
        row_M = input_train
        row_M = row_M[:, 2:5]
        sum_M = summing(row_M)
        inv_M = (1/sum_M)

        row_B = y_pred[:, :3]
        sum_B = summing(row_B)

        row_Q = tf.math.multiply(inv_M,row_B)
        alpha = 0.01
        penalty =  K.mean(K.square(sum_Q - 1))

        return K.mean(K.square(y_true - y_pred)) + (1/alpha) * penalty

    return custom_loss

Я бы хотел понять, правильно ли то, что я делаю Там нет ошибок и обучение проходит, но я не знаю, выполняет ли этот кусок кода то, что я пытаюсь определить. Главным образом, если это работает правильно, учитывая пакеты данных, а не отдельные записи

...