从Learn_runner.run更新到GCMLE上的tf.estimator.train_and_evaluate

时间:2018-02-14 19:22:52

标签: python tensorflow google-cloud-ml

我正在尝试确保在更新为tf.estimator.train_and_evaluate()而不是learn_runner.run()时覆盖所有内容。

我希望这个GCMLE自定义估算器样本的基础是:

learn_runner.run(
      generate_experiment_fn(
          min_eval_frequency=args.min_eval_frequency,
          eval_delay_secs=args.eval_delay_secs,
          train_steps=args.train_steps,
          eval_steps=args.eval_steps,
          export_strategies=[saved_model_export_utils.make_export_strategy(
              model.SERVING_FUNCTIONS[args.export_format],
              exports_to_keep=1
          )]
      ),
      run_config=tf.contrib.learn.RunConfig(model_dir=args.job_dir),
      hparams=hparam.HParams(**args.__dict__)
  )

export_strategies

以前,export_strategies会将最终的模型二进制文件放在$job_dir/export/Servo/$timestamp中。但是,在尝试转换为使用tf.estimator.train_and_evaluate时,我无法看到如何复制此行为。

按照这个较新的自定义估算器示例,我已通过

exporter = tf.estimator.FinalExporter('saved-model', SERVING_FUNCTIONS[hparams.export_format])

进入EvalSpec exporters = [exporter],但它不像以前那样作为最终的出口策略。

run_config

以前run_config作为附加命令传递,带有learn_runner.run()。现在我在run_experiment()函数中的方法是将run_config()直接传递给tf.estimator.Estimator的{​​{1}}参数。我有什么功能吗?

示例:

config

新的run_config实现是否存在我从旧实现中遗漏的内容?

1 个答案:

答案 0 :(得分:0)

问题来自停止num_epochs vs num_steps的情况 - 看来tf.estimator.Estimator与num_epochs的效果不佳所以你应该让你的停止条件是num_steps如果你想要一个导出文件夹。

另外,值得注意的是,如果您在model_dir内直接指定tf.estimator.Estimator()并在model_dir中指定run_config = tf.estimator.RunConfig(),则这些名称必须匹配。 TF文档表明,如果它们相等,则可以在两个地方指定model_dir“model_dir:目录以保存模型参数,图形等等。这也可用于将检查点从目录加载到估算器中以继续训练以前保存的模型。如果为None,则在设置时将使用config中的model_dir。如果两者都设置,则它们必须相同。如果两者都是None,则将使用临时目录。