У меня есть модель 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.