首页 文章

如何在Tensorflow Estimator的每一个全球步骤中获得火车损失并评估损失?

提问于
浏览
2

我可以在每一个全球步骤中获得遗失 . 但我确实想在张量板中添加图表'lossxx'中的评估损失 . 怎么做?

class MyHook(tf.train.SessionRunHook):
    def after_run(self,run_context,run_value):
      _session = run_context.session
      _session.run(_session.graph.get_operation_by_name('acc_op'))

  def my_model(features, labels, mode):
    ...
    logits = tf.layers.dense(net, 3, activation=None)
    predicted_classes = tf.argmax(logits, 1)
    if mode == tf.estimator.ModeKeys.PREDICT:
      predictions = {
        'class': predicted_classes,
        'prob': tf.nn.softmax(logits)
      }
      return tf.estimator.EstimatorSpec(mode, predictions=predictions)

    # Compute loss.
    loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
    acc, acc_op = tf.metrics.accuracy(labels=labels,   predictions=predicted_classes)
    tf.identity(acc_op,'acc_op')
    loss_sum = tf.summary.scalar('lossxx',loss)
    accuracy_sum = tf.summary.scalar('accuracyxx',acc)
    merg = tf.summary.merge_all()

    # Create training op.
    if mode == tf.estimator.ModeKeys.TRAIN:
      optimizer = tf.train.AdagradOptimizer(learning_rate=0.1)
      train_op = optimizer.minimize(loss,  global_step=tf.train.get_global_step())
      return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op,
                                      training_chief_hooks=[
                                            tf.train.SummarySaverHook(save_steps=10, output_dir='./model', summary_op=merg)])

    return tf.estimator.EstimatorSpec(
        mode, loss=loss, eval_metric_ops={'accuracy': (acc, acc_op)}
    )


  classifier.train(input_fn=train_input_fn, steps=1000,hooks=[ MyHook()])

enter image description here

2 回答

  • 2

    您实际上不需要自己创建 SummarySaverHook ,因为它已包含在 tf.estimator.Estimator 中 . 只需使用 tf.summary.xxx 创建所需的所有摘要,它们将在每个 n 步骤中进行评估 . (参见tf.estimator.RunConfig) .

    此外,您无需为最终损失 loss 创建摘要 . 这也将自动为您创建 . 如果您这样做,那么培训和评估摘要将显示在TensorBoard上的相同图表中 . 估算器在您当前的 model_dir 中创建一个子目录 eval 来实现此目的 .

    还有一个小提示:直接在摘要中使用 acc_op 来更新度量 and 获取它的值 . 但是, tf.metrics 函数很难处理;-)

  • 0

    您需要使用 tf.estimator.train_and_evaluate 将评估数据与训练数据一起传递给模型

相关问题