【发布时间】:2019-05-06 07:56:11
【问题描述】:
我正在尝试在 tf.Estimator 设置中计算 F1 分数。
我看过这个SO question,但无法从中提炼出可行的解决方案。
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-less 解决方案
【问题讨论】:
标签: python tensorflow tensorflow-estimator