Я работаю с 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
Я бы хотел понять, правильно ли то, что я делаю Там нет ошибок и обучение проходит, но я не знаю, выполняет ли этот кусок кода то, что я пытаюсь определить. Главным образом, если это работает правильно, учитывая пакеты данных, а не отдельные записи