我在多标签分类中使用了sigmoid
和binary_crossentropy
。
例如,y_true
的标签像[1,0,1,0,0]
,而y_pred
的标签像[0.8,0.3,0.9,0,0]
。
我如何设置Keras的自定义度量函数,使得y_pred
中每个大于0.5的元素映射到1,每个小于0.5的元素映射到0,然后比较y_pred
中与y_true
匹配的标签数量?
回答:
由于您在进行多标签分类,看来您是想将整个真实标签和预测标签进行比较。例如,对于一个真实标签为[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())