使用自定义损失编译keras模型可优化相同损失

时间:2019-12-10 16:06:10

标签: python keras

我正在使用分位数回归来编译模型。我希望能够指定任意数量的分位数,以便一次通过输出。为此,我有一个自定义损失函数。这两个代码段应该相同(当分位数的数组包含两个元素时):

model.compile(loss={'out_0': lambda y_true,y_pred: tilted_loss(q[0],y_true,y_pred),
                    'out_1': lambda y_true,y_pred: tilted_loss(q[1],y_true,y_pred),
              loss_weights={'out_0': 1, 'out_1': 1}, optimizer=adam) 
losses = {f'out_{i}': lambda y_true,y_pred: tilted_loss(q[i],y_true,y_pred) for i in range(len(q))}
losses_weights = {f'out_{k}': w[k] for k in range(len(w))}
model.compile(loss=losses, loss_weights=losses_weights, optimizer=adam) 

但是第一个损失正确运行,而第二个损失则两个损失变得相同(在训练期间,两个损失都显示相同的值),并且输出未收敛至正确的分位数-它们收敛至相同的值。这是keras的错误吗?还是1)某种程度上不等于2)?

0 个答案:

没有答案