用于多标签分类的 keras 自定义指标
keras custom metrics for multi-label classfication
我正在使用 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,y_pred
中小于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())
我正在使用 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,y_pred
中小于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())