python - 具有 F1 分数的 Keras 多标签图像分类

标签 python tensorflow keras classification multilabel-classification

我正在研究一个多标签图像分类问题,并根据系统预测标签和真实标签之间的F1-score进行评估。

鉴于此,我应该使用 loss="binary_crossentropy"loss=keras_metrics.f1_score() 其中 keras_metrics.f1_score() 是取自此处:https://pypi.org/project/keras-metrics/?我有点困惑,因为我在互联网上找到的所有关于多标签分类的教程都是基于 binary_crossentropy 损失函数,但在这里我必须针对F1 分数

此外,我应该设置 metrics=["accuracy"] 还是 metrics=[keras_metrics.f1_score()] 或者我应该将其完全留空?

最佳答案

基于user706838回答...

使用https://www.kaggle.com/rejpalcz/best-loss-function-for-f1-score-metric中的f1_score

import tensorflow as tf
import keras.backend as K

def f1_loss(y_true, y_pred):

    tp = K.sum(K.cast(y_true*y_pred, 'float'), axis=0)
    tn = K.sum(K.cast((1-y_true)*(1-y_pred), 'float'), axis=0)
    fp = K.sum(K.cast((1-y_true)*y_pred, 'float'), axis=0)
    fn = K.sum(K.cast(y_true*(1-y_pred), 'float'), axis=0)

    p = tp / (tp + fp + K.epsilon())
    r = tp / (tp + fn + K.epsilon())

    f1 = 2*p*r / (p+r+K.epsilon())
    f1 = tf.where(tf.is_nan(f1), tf.zeros_like(f1), f1)
    return 1 - K.mean(f1)

关于python - 具有 F1 分数的 Keras 多标签图像分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56315959/

相关文章:

python - 在 FastAPI 中匹配路由时如何失败

python - 如何循环访问 Jupyter/iPython Notebook 中的多个单元格

TensorFlow:无法创建 cudnn 句柄:CUDNN_STATUS_INTERNAL_ERROR 但没有其他 TF 实例正在运行

python - 在 TensorFlow 中合并字符串张量

python - 如何在不缓冲的情况下播放许多numpy数组

python - F() 表达式与 Django 的奇怪行为

python - tf.get_collection 提取一个作用域的变量

python - 生成用于 keras 训练的数据

keras - 如何在不破坏结构的情况下重命名 Keras 模型的层?

python - Keras - 'conv2d_5/convolution' (op : 'Conv2D' ) with input shapes: [? ,4,80,64], [5,5,64,64] 从 4 中减去 5 导致的负维度大小