请注意,当谈到一个类别的 准确性时 ,一个可能指以下(不等同)以下两个数量之一:
- 的 召回 ,其中,类 Ç ,是标记有类实例比率 Ç 被预测为具有类 Ç 。
- 的 精度 ,这对于类 Ç ,是的例子的比率预测为类的 Ç ,它们事实上标记类 Ç 。
除了进行复杂的索引编制外,您还可以仅依靠掩码进行计算。假设我们在这里谈论精度(更改召回率是微不足道的)。
from keras import backend as KINTERESTING_CLASS_ID = 0 # Choose the class of interestdef single_class_accuracy(y_true, y_pred): class_id_true = K.argmax(y_true, axis=-1) class_id_preds = K.argmax(y_pred, axis=-1) # Replace class_id_preds with class_id_true for recall here accuracy_mask = K.cast(K.equal(class_id_preds, INTERESTING_CLASS_ID), 'int32') class_acc_tensor = K.cast(K.equal(class_id_true, class_id_preds), 'int32') * accuracy_mask class_acc = K.sum(class_acc_tensor) / K.maximum(K.sum(accuracy_mask), 1) return class_acc
如果您想变得更灵活,还可以对感兴趣的类别进行参数设置:
from keras import backend as Kdef single_class_accuracy(interesting_class_id): def fn(y_true, y_pred): class_id_true = K.argmax(y_true, axis=-1) class_id_preds = K.argmax(y_pred, axis=-1) # Replace class_id_preds with class_id_true for recall here accuracy_mask = K.cast(K.equal(class_id_preds, interesting_class_id), 'int32') class_acc_tensor = K.cast(K.equal(class_id_true, class_id_preds), 'int32') * accuracy_mask class_acc = K.sum(class_acc_tensor) / K.maximum(K.sum(accuracy_mask), 1) return class_acc return fn
并将其用作:
model.compile(..., metrics=[single_class_accuracy(INTERESTING_CLASS_ID)])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)