tensorflow tfa.metrics.F1分数计算错误?

nc1teljy  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(106)

我从头开始训练Keras模型进行图像分类,并在训练期间打印F1分数。我在model.compile()metrics属性中使用以下指标:

METRICS = [
    tf.keras.metrics.CategoricalAccuracy(name='accuracy'),
    tf.keras.metrics.Precision(),
    tf.keras.metrics.Recall(),
    tfa.metrics.F1Score(name='f1', num_classes=7)
]

字符串
当我检查我的日志时,我的精度为0.98956,召回率为0.9875,F1分数为0.98113According to the formula in the documentation,F1分数应该是0.9885。是公式还是我的设置错误?

o7jaxewo

o7jaxewo1#

有点晚了,但我希望它仍然有帮助,
从我的研究中,我看到Kera 2.0中删除了F1分数指标,因为分数是分批近似的。我认为即使使用Tensorflow Addon,您也会面临这个问题。
欲了解更多详情,请访问:https://github.com/keras-team/keras/issues/5794#issuecomment-287641301
如果你想要F1分数,你可以在我实现的epoch结束时计算它:

model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=False),
              metrics=[
                tf.keras.metrics.BinaryAccuracy(),
                tf.keras.metrics.Precision(),
                tf.keras.metrics.Recall(),
              ])

class MetricsF1(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs=None):
        precision = logs['precision']
        recall = logs['recall']
        f1_score = 2 * (precision * recall) / (precision + recall)
        print("F1 SCORE TRAIN:", round(f1_score, 4))

        val_precision = logs['val_precision']
        val_recall = logs['val_recall']
        val_f1_score = 2 * (val_precision * val_recall) / (val_precision + val_recall)
        print("F1 SCORE VALIDATION:", round(val_f1_score, 4))

model.fit(train_dataset,
          epochs=10,
          callbacks=[
            MetricsF1()
          ],
          validation_data=val_dataset
)

字符串

相关问题