如何解决从零开始在Tensorflow中创建评估指标
我将tensorflow Estimator API与tensorboard一起使用,并且尝试创建自定义评估指标,该指标不在tf.compat.v1.metrics中,例如“准确性”。 。 我的_model_fn_eval是:
def _model_fn_eval(self,mode,features,labels,endpoints,logits,use_logits):
"""This is the EVAL part of model_fn."""
if mode != tf.estimator.ModeKeys.EVAL:
return None
if use_logits:
eval_predictions = logits
else:
eval_predictions = endpoints['Predictions']
variant_type = features['variant_type']
eval_metrics = (
eval_metric_fn,[labels,eval_predictions,variant_type])
if not self.use_tpu:
for name,value in eval_metrics[0](*eval_metrics[1]).items():
tf.compat.v1.summary.scalar(tensor=value,name=name)
return eval_metrics
此函数使用函数eval_metric_fn:
def eval_metric_fn(labels,predictions,variant_types):
"""Calculate eval metrics from Tensors,on CPU host.
Args:
labels: the ground-truth labels for the examples.
predictions: the predicted labels for the examples.
variant_types: variant types (int64 of EncodedVariantType.value) as a tensor
of (batch_size,) or None. The types of these variants. If None,no type
specific evals will be performed.
Returns:
A dictionary of string name to metric.
"""
predicted_classes = tf.argmax(input=predictions,axis=1)
metrics = {}
metrics['accuracy'] = tf.compat.v1.metrics.accuracy(labels=labels,predictions=predicted_classes)
return metrics
我要实现的指标记录了估算器分类为XX类的样本所占的百分比。
我尝试过的事情:
天真的,我试图将这部分代码添加到eval_metric_fn
:
# a function to measure the percentage of predictions with each label
per_label_predictions = lambda label: tf.math.reduce_mean(
tf.cast(
(tf.equal(tf.cast(predicted_classes,tf.int64),label)),tf.float32))
predictions_per_label = {f'percentage_{l}_predictions':
per_label_predictions(l)
for l in range(NUM_CLASSES)}
将此字典添加到metrics
字典后,应在指标dict上添加一个(键,值),该值是浮点数。
File "/home/yonatan/anaconda3/envs/yonatan_env/lib/python3.8/site-packages/tensorflow_estimator/python/estimator/model_fn.py",line 475,in _validate_eval_metric_ops
raise TypeError(
TypeError: Values of eval_metric_ops must be (metric_value,update_op) tuples,given: Tensor("Mean_10:0",shape=(),dtype=float32) for key: percentage_0_predictions
Process finished with exit code 1
我现在了解到,指标不仅仅是一个简单的浮点数,而且我应该实现这些update_ops
。但是,我似乎无法找到任何很好的例子。 TF的示例使用了预先建立的评估指标(此处:https://www.tensorflow.org/api_docs/python/tf/estimator/add_metrics),因此SO中的类似问题对我来说没有任何意义,因为它假定了我猜想的先前相识(此处:Custom eval_metric_ops in Estimator in Tensorflow)。>
需要更多信息,请让我知道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。