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

hua*_*986 4 tensorflow tensorflow-estimator

我会在全球的每一个步骤都蒙受训练损失。但是我确实想在张量板上的图'lossxx'中添加评估损失。怎么做?

  类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(功能,标签,模式):
    ...
    logits = tf.layers.dense(net,3,激活=无)
    预测类= tf.argmax(logits,1)
    如果模式== tf.estimator.ModeKeys.PREDICT:
      预测= {
        'class':predicted_classes,
        '问题':tf.nn.softmax(logits)
      }
      返回tf.estimator.EstimatorSpec(mode,projections = predictions)

    #计算损失。
    损失= tf.losses.sparse_softmax_cross_entropy(labels =标签,logits = logits)
    acc,acc_op = tf.metrics.accuracy(标签=标签,预测= predicted_classes)
    tf.identity(acc_op,'acc_op')
    loss_sum = tf.summary.scalar('lossxx',loss)
    precision_sum = tf.summary.scalar('accuracyxx',acc)
    merg = tf.summary.merge_all()

    #创建培训项目。
    如果mode == tf.estimator.ModeKeys.TRAIN:
      优化器= tf.train.AdagradOptimizer(learning_rate = 0.1)
      train_op = optimizer.minimize(损失,global_step = tf.train.get_global_step())
      返回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)])

    返回tf.estimator.EstimatorSpec(
        模式,损失=损失,eval_metric_ops = {'accuracy':(acc,acc_op)}
    )


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

在此处输入图片说明

mad*_*n25 5

实际上,您不需要自己创建一个SummarySaverHook,因为它已经包含在中tf.estimator.Estimator。只需创建所有需要的摘要tf.summary.xxx,它们就会在每个n步骤中得到评估。(参见tf.estimator.RunConfig此)。

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

还有一个小提示:acc_op直接在摘要中使用以更新指标获取其值。但是,这些tf.metrics功能很难处理;-)