事前に用意された推定器をトレーニングするときの損失とともに精度メトリックスを印刷する最も簡単な方法は何ですか?
ほとんどのチュートリアルとドキュメントは、カスタム推定器を作成するときの問題に対処しているようです-利用可能なものの1つを使用するつもりである場合、これはやりすぎのようです。
tf.contrib.learnには、いくつか(現在は非推奨)のMonitorフックがありました。現在、TFはフックAPIの使用を提案していますが、実際には、ラベルと予測を利用して精度の数値を生成できるものは何も付いていないようです。
tf.contrib.estimator.add_metrics(estimator, metric_fn)
( doc )を試しましたか?これは、初期化された推定器(事前に定義できます)を受け取り、metric_fn
によって定義されたメトリックを追加します。
使用例:
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)
ログ:
...
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [20/200]
INFO:tensorflow:Evaluation [40/200]
...
INFO:tensorflow:Evaluation [200/200]
INFO:tensorflow:Finished evaluation at 2018-04-19-09:23:03
INFO:tensorflow:Saving dict for global step 1: accuracy = 0.5668, average_loss = 0.951766, custom_metric = 1.2442, global_step = 1, loss = 95.1766
...
ご覧のとおり、custom_metric
はデフォルトのメトリックと損失とともに返されます。
@Aldreamの回答に加えて、 TensorBoard を使用してcustom_metric
のグラフィックを表示することもできます。これを行うには、次のようにTensorFlowの要約に追加します。
tf.summary.scalar('custom_metric', custom_metric)
tf.estimator.Estimator
を使用する場合のクールな点は、サマリーがFileWriter
に自動的に追加されるため(デフォルトでは100ステップごとにマージして保存するため)、サマリーを追加する必要がないことです。
TensorBoardを表示するには、新しいターミナルを開いて次のように入力する必要があります。
tensorboard --logdir={$MODEL_DIR}
その後、localhost:6006
でブラウザのグラフィックを確認できます。