我创建了使用binary_classification_head()
的自定义估算器。一切正常,但问题在于可见指标。我正在使用级别为tf.logging.set_verbosity(tf.logging.INFO)
和张量板的日志记录,但是我只看到损失值。
我添加了此代码,但无济于事。
def my_accuracy(labels, predictions):
return {'accuracy': tf.metrics.accuracy(labels, predictions['logistic'])}
classifier = tf.contrib.estimator.add_metrics(classifier, my_accuracy)
您知道其他添加指标的方法吗?
答案 0 :(得分:0)
您需要在model_fn
中放置相关的指标函数。
例如:
tf.summary.image('input_image', input_image, max_outputs)
for v in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES):
tf.summary.histogram(v.name, v)
包含update_op
的指标(例如f1得分的准确性)需要提供给eval_metric_ops
。使用切片是因为它们输出两个值,即度量值和更新操作
f1 = tf.contrib.metrics.f1_score(labels, predictions, num_thresholds)
accuracy = tf.metrics.accuracy(labels, predictions)
tf.summary.scalar('accuracy', accuracy[1])
eval_metric_ops = {
'f1_score': f1,
'accuracy': accuracy
}
return tf.estimator.EstimatorSpec(mode=mode,
loss=loss,
train_op=train_op,
eval_metric_ops=eval_metric_ops,
)
eval_metric_ops
字典可以同时在训练模式和评估模式下提供。
如果您使用固定估算器,则可以使用add_metrics
编辑:
根据官方文档,您可以将binary_classification_head
与固定估算器一起使用,也可以在model_fn函数中使用,该函数返回estimator_spec。参见
my_head = tf.contrib.estimator.binary_classification_head()
my_estimator = tf.estimator.DNNEstimator(
head=my_head,
hidden_units=...,
feature_columns=...)
在这种情况下,即使没有add_metrics函数,您也应该能够添加指标