use*_*838 6 python classification multilabel-classification keras tensorflow
我正在研究multi-label图像分类问题,并根据F1-score系统预测和真实标签之间的评估进行评估。
鉴于这种情况,我应该使用loss="binary_crossentropy"或loss=keras_metrics.f1_score()地方keras_metrics.f1_score()就是从这里取:https://pypi.org/project/keras-metrics/?我有点困惑,因为我在网上找到的所有关于multi-label分类的教程都是基于binary_crossentropy损失函数的,但在这里我必须针对F1-score.
此外,我应该设置metrics=["accuracy"]还是metrics=[keras_metrics.f1_score()]应该将其完全留空?
根据用户706838的回答...
使用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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |