在Keras中,我有一个y_true的目标向量,它适合于具有一个输出神经元的网络 . y_true = [0,1,0,1,1 ....]我有一些收益[1,1,1,-5,1 ...]
我试图将支付作为额外参数放入keras的自定义损失函数中 . Keras只允许将两个参数传递给它(y_true和y_pred),但我还想传递分配给每个样本的支付 . 为此,我在y_true中添加了第二列,其中包含这些值 .
然后我尝试通过执行以下操作在损失函数中再次分离实际的y_true(第一列)和支付(第二列):
def custom_loss(y_true, y_pred)
# y_true has the payoffs in the second row
payoffs = y_true[:, 1]
payoffs = K.expand_dims(payoffs, 1)
y_true = y_true[:, 0]
y_true = K.expand_dims(y_true, 1))
loss = K.binary_crossentropy(y_true, y_pred)
return loss
这是我想要做的简化版本(在真实版本中,我将把收益整合到损失函数中) . 但是对于上面的例子,我希望损失函数与直接调用binary_cross entropy相同,只有y_true只包含y_true(没有任何支付) .
但是,结果不如预期,因为上面的自定义损失函数的精度值约为一半 .
可能是造成此错误的原因是什么?我没有正确切割y_true吗?
问题与this post中描述的内容有关(curiale在2017年12月12日的评论建议使用slice_stack,但问题是相同的) .
1 回答
我认为问题是我还需要自定义度量函数 .