首页 > 解决方案 > 如何在 Keras 中将精度定义为损失函数?

问题描述

众所周知,keras 中的 sparse_categorical_crossentropy 可以得到每个类别之间的平均损失函数。但是,如果我最关心的只是一个特定的类别呢?比如如果我想将基于这个类别的精度(=TP/(TP+FP))定义为损失函数,我该怎么写呢?谢谢!</p>

我的代码就像:

from keras import backend as K
def my_loss(y_true,y_pred):
    y_true = K.cast(y_true,"float32")
    y_pred = K.cast(K.argmax(y_pred),"float32")
    nominator = K.sum(K.cast(K.equal(y_true,y_pred) & K.equal(y_true, 0),"float32"))
    denominator = K.sum(K.cast(K.equal(y_pred,0),"float32"))
    return -(nominator + K.epsilon()) / (denominator + K.epsilon())

错误是这样的:

argmax is not differentiable

标签: kerasloss-function

解决方案


我不建议您使用精度作为损失函数。

  • 不能将其设置为 nn 的损失函数是不可微的。
  • 您可以通过将所有实例预测为负类来最大化它,这是没有意义的。

一种替代解决方案是使用 F1 作为损失函数,然后手动调整概率截止以获得理想的精度水平,并且召回率不会太低。


推荐阅读