Как получить информацию о потере поезда и оценить потерю на каждом глобальном шаге в Tensorflow Estimator?

Я могу получить убыток от трейдинга на каждом глобальном шаге. Но я хочу добавить оценку потерь в график «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()])

введите описание изображения здесь


person huaxz1986    schedule 02.01.2018    source источник
comment
Функция поезда оценки обычно использует только обучающие данные в качестве входных данных. Вам нужно будет иметь некоторые данные для проверки в каждой партии? Или альтернативные пакеты обучения и пакеты проверки?   -  person Olivier Moindrot    schedule 06.01.2018
comment
просто чтобы убедиться, что я вас правильно понял: вы хотите перекрыть потерю оценки с потерей во время тренировки? Если да, хотите ли вы, чтобы потери были усреднены по всем образцам в проверочном наборе? В противном случае, как вы хотите объединить ось x (global_step) lossxx с осью x из оценки?   -  person maddin25    schedule 13.07.2018


Ответы (2)


На самом деле вам не нужно создавать SummarySaverHook самостоятельно, поскольку он уже включен в tf.estimator.Estimator. Просто создайте все необходимые сводки с помощью tf.summary.xxx, и все они будут оцениваться каждые n шагов. (Для этого см. tf.estimator.RunConfig).

Кроме того, вам не нужно составлять сводку по окончательному проигрышу loss. Это также будет создано для вас автоматически. Если вы сделаете это так, то итоги обучения и оценки будут отображаться на одном графике на TensorBoard. Для этого оценщик создает подкаталог eval в вашем текущем model_dir.

И небольшой совет: используйте acc_op непосредственно в сводках, чтобы обновить метрику и получить ее значение. Однако с tf.metrics функциями довольно сложно справиться ;-)

person maddin25    schedule 13.07.2018

Вам необходимо передать данные оценки в модель вместе с данными обучения, используя tf.estimator.train_and_evaluate

person Sharky    schedule 20.10.2018
comment
эта train_and_evalulate функция интересна - person datdinhquoc; 04.09.2019