2017-08-25 14 views
0

列車と評価時間の両方でMLエンジン実験でいくつかの要約スカラーを出力しようとしています。 tf.summary.scalar('loss', loss)は、テンソルボード内の同じプロットでトレーニングと評価の両方について要約スカラーを正しく出力しています。しかし、私はまた、列車と評価時間の両方で他のメトリックを出力しようとしており、列車時間にのみ出力しています。コードはすぐにtf.summary.scalar('loss', loss)に従いますが、動作しているようには見えません。たとえば、次のようなコードは、TRAINでは出力されますが、EVALでは出力されません。唯一の違いは、これらのカスタム精度の機能を使用していることですが、彼らはTRAINMLエンジン実験eval tf.summary.scalarがテンソルボードに表示されない

if mode in (Modes.TRAIN, Modes.EVAL): 
    loss = tf.contrib.legacy_seq2seq.sequence_loss(logits, outputs, weights) 
    tf.summary.scalar('loss', loss) 

    sequence_accuracy = sequence_accuracy(targets, predictions,weights) 
    tf.summary.scalar('sequence_accuracy', sequence_accuracy) 

のために働いているsequence_accuracyのみTRAINのためにプロットだろうが損失は、両方TRAIN & EVALためtensorboardにプロットする理由それはどんな意味がありますか?

この動作は、「実行ごとに1つ以上のメタデータイベントが見つかりました。最新のイベントでメタデータを上書きしました。」という警告に関連していますか?

答えて

1

グラフのsummaryノードは単なるノードなので、まだ評価する必要があり(protobuf文字列を出力する)、その文字列をファイルに書き込む必要があります。それはあなたのグラフのtrain_opの上流ではなく、評価されたとしてもをあなたのと指定しない限り、ファイルに書き込まれませんので、トレーニングモードでは評価されません。EstimatorSpecEstimatorクラスでは、トレーニング中に余分な評価を行うことを想定していないため、通常の評価はEVALフェーズでのみ行われ、さらに評価データポイントを取得するにはmin_eval_frequencyまたはcheckpoint_frequencyを増やすだけです。

あなたが本当にがトレーニング中に概要を記録したい場合は、ここであなたがそれを行うだろう方法は次のとおりです。

def model_fn(mode, features, labels, params): 
    ... 
    if mode == Modes.TRAIN: 
    # loss is already written out during training, don't duplicate the summary op 
    loss = tf.contrib.legacy_seq2seq.sequence_loss(logits, outputs, weights) 
    sequence_accuracy = sequence_accuracy(targets, predictions,weights) 
    seq_sum_op = tf.summary.scalar('sequence_accuracy', sequence_accuracy) 
    with tf.control_depencencies([seq_sum_op]): 
     train_op = optimizer.minimize(loss) 

    return tf.estimator.EstimatorSpec(
     loss=loss, 
     mode=mode, 
     train_op=train_op, 
     training_chief_hooks=[tf.train.SummarySaverHook(
      save_steps=100, 
      output_dir='./summaries', 
      summary_op=seq_sum_op 
    )] 
    ) 

しかし、それはちょうどあなたのevalの周波数を高くし、tf.metrics.streaming_accuracy

と精度のため eval_metric_opsを作る方が良いでしょう
+0

「トレーニングモードでは評価されていません」と言っているので少し混乱していますが、私が直面している問題はトレーニング用に出力しており、評価モードでは出力していないということです。トレーニング・メトリックを見て予期しない動作を観察しているテンソルボードに表示されますか? – reese0106

+0

これとは別に、私がeval_metric_opsの外でこれをしたいのは、潜在的なオーバーフィットのためのもう一つの尺度として、あるいは予測が生成されているという兆候として、評価時間中の訓練時間と精度の間に正確さを示す単一のプロット異なる。たとえば、feed_previous = FalseでRNNをトレーニングしていて、feed_previous = Trueで評価している場合、feed_previous = Falseでトレーニング中の精度がどのようになっているのかを知り、evalとfeed_previous = Trueを比較したいと考えています。 – reese0106

+0

私はちょっと混乱しています、Estimatorはすでにトレーニングと評価統計をオーバーレイしています。 –

関連する問題