我有一个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。