具有自定义损失函数的Keras精度

具有自定义损失函数的Keras精度,keras,loss-function,Keras,Loss Function,我正在Keras中使用自定义损失函数: def get_top_one_probability(vector): return (K.exp(vector) / K.sum(K.exp(vector))) def listnet_loss(real_labels, predicted_labels): return -K.sum(get_top_one_probability(real_labels) * tf.math.log(get_top_one_probability(pred

我正在
Keras
中使用自定义损失函数:

def get_top_one_probability(vector):
  return (K.exp(vector) / K.sum(K.exp(vector)))

def listnet_loss(real_labels, predicted_labels):
  return -K.sum(get_top_one_probability(real_labels) * tf.math.log(get_top_one_probability(predicted_labels)))

如何使用自定义损失函数计算度量值
精度

损失函数和精度函数是两种不同的度量值。
改变一个不会改变另一个。因此,如果您的任务是一个回归问题,那么精度函数不会改变,也会很好(Keras使用回归问题的
回归精度
函数)。多类分类也一样(Keras使用
分类精度
函数解决多类问题)

但是,请确保当任务为二元分类时,更改损失函数会将精度函数从
二元精度
更改为
分类精度
,因此您可能会得到不同的结果。
解决方法是使用二进制_accuarcy,如下所示:

def binary_accuracy(y_true, y_pred):
    return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
model.compile(loss=custom_loss,
              metrics=[binary_accuracy])

损失和准确性是两码事。更改损失函数不会更改精度函数。你想干什么?是二进制分类还是多类分类classififcation@DvirSamuel我知道损失和准确度是不同的。也许我对这个问题的理解不好。如果我使用自定义损失函数,我想知道Keras计算的精度是否可靠。它应该是可靠的。我知道在二进制分类任务中使用自定义损失函数时有一个技巧(所以请告诉我这是否是您的情况)。但对于其他任务,更改损失函数不会更改精度函数。@我的任务更像是一个回归问题。基本上,我试图对一个句子中的单词进行排序,为了做到这一点,我的NN为每个单词输出一个实数,然后对这些输出进行排序。请参阅我的答案。我给了其他会看到这个问题的人一个大致的答案