Пользовательская функция потерь в Keras с различными типами переменных - PullRequest
0 голосов
/ 09 января 2020

У меня есть модель keras.Sequential(), которая предназначена для вывода значений 2*n. Первый n должен рассматриваться как целое число, а второй n должен рассматриваться как число с плавающей точкой (даже если все они на самом деле будут числами с плавающей точкой). Я хотел бы написать пользовательскую функцию стоимости, которая имеет дело с функцией потерь в интах не так, как с плавающей точкой.

Я понимаю, что функция потерь должна иметь форму def myloss(y_actual, y_predicted), и если бы я рассматривал их в качестве списков, то пример функции стоимости, которую я хотел бы реализовать, выглядит следующим образом:

def myloss(y_true, y_pred):
    # Assume first half are to be treated as ints
    n = len(y_actual)/2
    y_true_ints = y_true[:n]
    y_pred_ints = y_pred[:n]
    for (y1, y2) in zip(y_true_ints, y_pred_ints):
        # Greatly penalize for diffs when floats are cast as ints
        loss += (float(round(y1)) - float(round(y2)))**4

    y_true_floats = y_true[n:]
    y_pred_floats = y_pred[n:]
    for (y1, y2) in zip(y_true_floats, y_true_floats):
        # Simple SSE for floats
        loss += (y1 - y2)**2

    return loss

Здесь я знаю, что все входные данные будут плавающими, но я хочу привести первую половину каждого как целые и применить значительные штрафы если они не одинаковы. Однако «истинную» часть с плавающей точкой можно рассматривать как простое SSE.

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