我正在尝试在
我看到了这个SO问题,但无法从中提炼出可行的解决方案。
tf.Estimator
设置中计算F1得分。我看到了这个SO问题,但无法从中提炼出可行的解决方案。
tf.Estimator
的问题在于它希望我提供一个值和一个更新操作,所以现在,我在模型结尾处有以下代码:if mode == tf.estimator.ModeKeys.EVAL:
with tf.variable_scope('eval'):
precision, precision_update_op = tf.metrics.precision(labels=labels,
predictions=predictions['class'],
name='precision')
recall, recall_update_op = tf.metrics.recall(labels=labels,
predictions=predictions['class'],
name='recall')
f1_score, f1_update_op = tf.metrics.mean((2 * precision * recall) / (precision + recall), name='f1_score')
eval_metric_ops = {
"precision": (precision, precision_update_op),
"recall": (recall, recall_update_op),
"f1_score": (f1_score, f1_update_op)}
现在准确率和召回率似乎都运行正常,但是对于 F1 分数,我一直得到 nan
。
我该如何使其正常运行?
编辑:
可以使用 tf.contrib.metrics.f1_score
来实现一个可行的解决方案,但由于 contrib
在 TF 2.0 中将被弃用,因此我需要一个不依赖 contrib
的解决方案。
eval_metric_ops
期望得到一个(value, update_op)
元组。 - bluesummers