如何在Keras中为张量创建布尔蒙版?

如何在Keras中为张量创建布尔蒙版?,第1张

如何在Keras中为张量创建布尔蒙版?

请注意,当谈到一个类别的 准确性时 ,一个可能指以下(不等同)以下两个数量之一:

  • 召回 ,其中,类 Ç ,是标记有类实例比率 Ç 被预测为具有类 Ç
  • 精度 ,这对于类 Ç ,是的例子的比率预测为类的 Ç ,它们事实上标记类 Ç

除了进行复杂的索引编制外,您还可以仅依靠掩码进行计算。假设我们在这里谈论精度(更改召回率是微不足道的)。

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)])


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5667027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存