使用自定义估算器绘制验证和培训准确性

问题描述 投票:0回答:1

所以我正在使用这个tutorial来创建我自己的自定义估算器,我不能让张量板在训练过程中同时绘制验证准确性。这个在Github上的issue完美地描述了我的问题。正如上次评论中提到的那样,通过将save_checkpoints_steps设置为较小的值,模型应该在每一步进行评估,但对我来说情况并非如此。我跑完之后:

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)

我只在情节中得到两分。我已经尝试了不同的值,我仍然得到相同的结果。 Tensorboard plot with save_checkpoints_steps = 1

python tensorflow tensorboard tensorflow-estimator
1个回答
0
投票

由于没有人想出答案,我暂时发布这个凌乱的解决方案。

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)

基本上,您只需要执行少量步骤的培训,然后进行一次评估。

© www.soinside.com 2019 - 2024. All rights reserved.