我正在训练一个二元分类器,我希望看到不同阈值的 Precision/Recall 指标。
Tensorflow 2.3 引入了tf.keras.metrics.Precision和tf.keras.metrics.Recall,它们带有一个thresholds参数,您可以在其中指定一个或多个要计算指标的阈值。这一切都像宣传的那样工作,即
m = tf.keras.metrics.Precision(thresholds=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6])
m.update_state([0, 1, 0, 1], [0.4, 0.5, 0.3, 0.8])
m.result().numpy()
[0.5, 0.5, 0.6666667, 1., 1., 1.]根据文档,返回每个阈值的精度值。
但是,当作为指标传递给Model.compile我时,无论我有多少阈值,我都会得到一个指标。
pr_thresholds = list(np.arange(0.05, 0.95, 0.05))
model.compile(
'adam',
'binary_crossentropy',
metrics=[
keras.metrics.Precision(thresholds=pr_thresholds),
keras.metrics.Recall(thresholds=pr_thresholds),
]
)
我明白了
Epoch 34/50
395/395 [==============================] - 22s 54ms/step - loss: 0.4314 - precision: 0.7886 - recall: 0.9008 - val_loss: 0.5113 - val_precision: 0.7434 - val_recall: 0.8769
这里发生了什么事 ?在这种情况下,它总是使用默认阈值 0.5 吗?
有没有办法让它在训练期间显示多个阈值的值?

