Постройте график точности проверки и обучения с использованием пользовательских оценок

#python #tensorflow #tensorboard #tensorflow-estimator

#python #тензорный поток #тензорная доска #tensorflow-оценщик

Вопрос:

Итак, я использую этот учебник для создания собственного пользовательского оценщика, и я не могу заставить tensorboard отображать точность проверки во время процесса обучения. Эта проблема на Github прекрасно описывает мою проблему. Как кто-то упомянул в последнем комментарии, установив значение save_checkpoints_steps small, модель должна выполнять оценку на каждом шаге, однако для меня это не так. после запуска:

 classifier = tf.estimator.Estimator(
  model_fn=my_model,
  params={
      'n_classes': 4,
  },
  model_dir=model_dir_str,
  config=tf.estimator.RunConfig(save_checkpoints_steps=int(1)))

loss_hook = early_stopping.stop_if_lower_hook(classifier, "loss", 0.2, model_dir_str   'loss_eval')
acc_hook = early_stopping.stop_if_no_increase_hook(classifier, "accuracy", 100, model_dir_str   'acc_eval')
train_spec = tf.estimator.TrainSpec(input_fn=input_train_fn, max_steps=steps, hooks=[loss_hook, acc_hook])
eval_spec = tf.estimator.EvalSpec(input_fn=input_eval_fn, steps=1000)
results = tf.estimator.train_and_evaluate(classifier, train_spec, eval_spec)
 

Я получаю только две точки на графике. Я экспериментировал с разными значениями для и все равно получаю те же результаты.
График тензорной доски с save_checkpoints_steps = 1

Ответ №1:

Поскольку никто не нашел ответа, я пока публикую этот грязный обходной маневр.

 loss_hook = early_stopping.stop_if_lower_hook(classifier, "loss", 0.2, 'loss_eval')
acc_hook = early_stopping.stop_if_no_increase_hook(classifier, "accuracy", 100, 'acc_eval')    
tf.logging.set_verbosity(False)
for i in range(int(steps/10)):
    print(i)
    classifier.train(
        input_fn=input_train_fn,
        steps=10,
        hooks=[loss_hook, acc_hook])
    # Evaluate the model.
    eval_result = classifier.evaluate(input_fn=input_eval_fn, steps=5)
print(eval_result)
 

По сути, вы запускаете тренинг для небольшого количества шагов, а затем выполняете одну оценку.