在使用实验中包含的Estimator时,您是否知道是否有办法选择保存哪个模型?因为每个' save_checkpoints_steps',模型都会被保存,但这个模型不一定是最好的。
def model_fn(features, labels, mode, params):
predict = model_predict_()
loss = model_loss()
train_op = model_train_op(loss, mode)
predictions = {"predictions": predict}
return tf.estimator.EstimatorSpec(
mode = mode,
predictions = predictions,
loss = loss,
train_op = train_op,
)
def experiment_fn(run_config, hparams):
estimator = tf.estimator.Estimator(
model_fn = model_fn,
config = run_config,
params = hparams
)
return learn.Experiment(
estimator = estimator,
train_input_fn = train_input_fn,
eval_input_fn = eval_input_fn,
eval_metrics = None,
train_steps = 1000,
)
ex = learn_runner.run(
experiment_fn = experiment_fn,
run_config = run_config,
schedule = "train_and_evaluate",
hparams = hparams
)
输出如下:
INFO:tensorflow:将401的检查点保存到。\ model.ckpt。
INFO:tensorflow:global_step / sec:0.157117 INFO:tensorflow:step = 401, 损失= 2.95048(636.468秒)
信息:tensorflow:开始评估 2017-09-05-20:06:07 INFO:tensorflow:从中恢复参数 \ model.ckpt-401
信息:张量流:评估[1/1]信息:张量流:完成评估 2017-09-05-20:06:09
INFO:tensorflow:为全局步骤保存dict 401:global_step = 401,loss = 7.20411
INFO:tensorflow:验证(步骤401): global_step = 401,损失= 7.20411
信息:tensorflow:训练损失= 2.95048,步骤= 401(315.393秒)
INFO:tensorflow:将451的检查点保存到 \ model.ckpt。
信息:tensorflow:在2017-09-05-20:11:32开始评估
INFO:tensorflow:从中恢复参数 \ model.ckpt-451
信息:张量流:评估[1/1]
每次保存最后一个模型时都会看到,这不一定是最好的。
答案 0 :(得分:2)
为您的训练过程中断的事件保存检查点。如果您没有检查点,则需要从头开始重启。对于需要数周训练的大型车型来说,这是一个大问题。
一旦您的训练完成并且您对您的模型感到满意(用您的话说,"这是最好的"),您可以使用https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator#export_savedmodel明确保存它。调用此方法位于您用于创建Estimator
的{{1}}上。请注意,此方法可以保存"模型以进行推理"这意味着所有的渐变操作都将被剥离而不能保存。
编辑:回复Nicolas的评论
除了使用创建估算工具时传递的Experiemnt
RunConfig
选项,您还可以定期保存快照。如果您发现您的模型在10小时前达到了最佳性能,那么您应该可以从大致时间找到快照。