为什么tensorflow插件F1得分给0正确猜测?

  • 本文关键字:tensorflow 插件 F1 tensorflow
  • 更新时间 :
  • 英文 :


我很困惑。我的目标是用F1 Score训练我的CNN模型。然而,结果很奇怪

import tensorflow_addons as tfa
import numpy as np
metric = tfa.metrics.F1Score(
num_classes=4, threshold=0.5)
y_true = np.array([
[0, 1, 0, 0],
# [0, 1, 0, 0],
# [1, 0, 0, 0]
], np.int32)
y_pred = np.array([
[0, 1, 0, 0],
# [0.2, 0.6, 0.2, 0.2],
# [0.6, 0.2, 0.2, 0.2]
], np.float32)
metric.update_state(y_true, y_pred)
result = metric.result()
result.numpy()

预期结果为

[1,1,1,1]

因此,当我想获得宏F1 Score时,它应该是1而不是0.25

实际结果是

[0, 1, 0, 0]

因此,当我使用参数average=macro时,实际结果是0.25

编辑:

我很困惑。我添加另一行y_true,它的工作。我希望它抛出错误,但它没有。

import tensorflow_addons as tfa
import numpy as np
metric = tfa.metrics.F1Score(
num_classes=4, threshold=0.5)
y_true = np.array([
[0, 1, 0, 0],
[1, 0, 0, 0]
# [0, 1, 0, 0],
# [1, 0, 0, 0]
], np.int32)
y_pred = np.array([
[0, 1, 0, 0],
# [0.2, 0.6, 0.2, 0.2],
# [0.6, 0.2, 0.2, 0.2]
], np.float32)
metric.update_state(y_true, y_pred)
result = metric.result()
result.numpy()

tensorflow插件有bug吗?

tfa.metrics.F1Score没有问题。您已经定义了4个类,y_pred行的每个元素表示类的概率,如果超过阈值则为1,然后计算F1分数。在你的第一个例子中,没有输出表示类0,2,3,这就是为什么它们是零。

检查下面的例子,

y_true = np.array([
[0, 1, 1, 0],
[0, 0, 0, 1],
[1, 0, 1, 0],
y_pred = np.array([
[0, 1, 0, 0],
[0, 1, 0, 0],
[0.6, 0, 0.51, 0],
#metrics.F1Score
[1.       , 0.6666667, 0.6666667, 0.       ]

相关内容

  • 没有找到相关文章

最新更新