首页 > 解决方案 > 用于多标签分类的 keras 自定义指标

问题描述

我正在使用sigmoidandbinary_crossentropy进行多标签分类。

例如,标签y_true是like [1,0,1,0,0],标签y_pred是like [0.8,0.3,0.9,0,0]

如何设置 Keras 自定义度量函数,使y_pred大于 0.5 的每个元素映射为 1,y_pred小于 0.5 的每个元素映射为 0,然后比较y_pred匹配的标签数y_true

标签: tensorflowmachine-learningkerasdeep-learningmultilabel-classification

解决方案


由于您正在进行多标签分类,因此您似乎希望将整个真实标签和预测标签相互比较。例如,对于一个具有真实标签[1, 0, 0]和预测标签的单个样本,[0, 0, 0]您认为预测准确度为零(尽管第二类和第三类的标签已被正确预测)。如果是这种情况,您可以比较标签,然后使用all()后端的方法来确保所有类的标签彼此匹配:

from keras import backend as K

def full_multi_label_metric(y_true, y_pred):
    comp = K.equal(y_true, K.round(y_pred))
    return K.cast(K.all(comp, axis=-1), K.floatx())

推荐阅读