首页 文章

ML引擎实验eval tf.summary.scalar不在tensorboard中显示

提问于
浏览
0

我试图在火车和评估时间的ML引擎实验中输出一些汇总标量 . tf.summary.scalar('loss', loss) 正在输出exporboard中相同图上的训练和评估的汇总标量 . 但是,我也试图在火车和评估时间输出其他指标,它们只在火车时间输出 . 紧接着 tf.summary.scalar('loss', loss) 的代码,但似乎不起作用 . 例如,以下代码仅输出TRAIN,但不输出EVAL . 唯一的区别是它们使用自定义精度功能,但它们适用于TRAIN

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)

是否有任何意义为什么损失会在TRAIN和EVAL的张量板中绘制,而sequence_accuracy只会为TRAIN绘制?

这种行为是否与我收到的警告有关“每次运行发现多个元图事件 . 用最新事件覆盖元图 . ”?

1 回答

  • 2

    因为图中的 summary 节点只是一个节点 . 它仍然需要进行评估(输出protobuf字符串),并且该字符串仍然需要写入文件 . 它不是图表中 train_op 的上游,即使它被评估,也不会写入文件,除非你在 EstimatorSpec 中指定tf.train.SummarySaverHook作为你的一个 training_chief_hooks . 因为 Estimator 类不假设您希望在训练期间进行任何额外评估,所以通常仅在EVAL阶段进行评估,并且您只需增加 min_eval_frequencycheckpoint_frequency 以获得更多评估数据点 .

    如果您真的想在培训期间记录摘要's how you' d请执行以下操作:

    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

相关问题