def custom_metric(labels, predictions):
# This function will be called by the Estimator, passing its predictions.
# Let's suppose you want to add the "mean" metric...
# Accessing the class predictions (careful, the key name may change from one canned Estimator to another)
predicted_classes = predictions["class_ids"]
# Defining the metric (value and update tensors):
custom_metric = tf.metrics.mean(labels, predicted_classes, name="custom_metric")
# Returning as a dict:
return {"custom_metric": custom_metric}
# Initializing your canned Estimator:
classifier = tf.estimator.DNNClassifier(feature_columns=columns_feat, hidden_units=[10, 10], n_classes=NUM_CLASSES)
# Adding your custom metrics:
classifier = tf.contrib.estimator.add_metrics(classifier, custom_metric)
# Training/Evaluating:
tf.logging.set_verbosity(tf.logging.INFO) # Just to have some logs to display for demonstration
train_spec = tf.estimator.TrainSpec(input_fn=lambda:your_train_dataset_function(),
max_steps=TRAIN_STEPS)
eval_spec=tf.estimator.EvalSpec(input_fn=lambda:your_test_dataset_function(),
steps=EVAL_STEPS,
start_delay_secs=EVAL_DELAY,
throttle_secs=EVAL_INTERVAL)
tf.estimator.train_and_evaluate(classifier, train_spec, eval_spec)
除了@Aldream的答案,您还可以使用TensorBoard来查看
custom_metric
的一些图形。为此,请将其添加到TensorFlow摘要中,如下所示:当您使用
tf.estimator.Estimator
时,最酷的事情是您不需要将摘要添加到FileWriter
,因为它是自动完成的(默认情况下每100步合并并保存一次)。在要查看TensorBoard,您需要打开一个新终端并键入:
^{pr2}$之后,您将能够在浏览器中的
localhost:6006
上看到图形。在你试过
tf.contrib.estimator.add_metrics(estimator, metric_fn)
(doc)吗?它接受一个初始化的估计器(可以预先封装)并将metric_fn
定义的度量添加到它。在使用示例:
日志:
^{pr2}$如您所见,
custom_metric
将与默认度量和损失一起返回。在相关问题 更多 >
编程相关推荐