【发布时间】:2019-03-09 13:14:27
【问题描述】:
假设您正在使用类似于@simlmx's 的设置中的验证数据集来训练自定义tf.estimator.Estimator 和tf.estimator.train_and_evaluate:
classifier = tf.estimator.Estimator(
model_fn=model_fn,
model_dir=model_dir,
params=params)
train_spec = tf.estimator.TrainSpec(
input_fn = training_data_input_fn,
)
eval_spec = tf.estimator.EvalSpec(
input_fn = validation_data_input_fn,
)
tf.estimator.train_and_evaluate(
classifier,
train_spec,
eval_spec
)
通常,当训练数据集的损失继续改善但验证数据集没有改善时,人们会使用验证数据集来切断训练以防止过度拟合。
目前tf.estimator.EvalSpec 允许指定在多少steps(默认为100)之后评估模型。
如何在评估损失没有改善的情况下(如果可能不使用tf.contrib 函数)指定在n 评估调用次数(n * steps)之后终止训练,然后保存“最佳”模型/检查点(由验证数据集确定)到唯一的文件名(例如best_validation.checkpoint)
【问题讨论】:
-
@GPhilo 类似,但不完全一样。尚不清楚提前停止 (
tf.contrib.estimator.stop_if_no_decrease_hook) 钩子是否适用于EvalSpec -
我不确定我是否收到您的评论。
EvalSpec仅指定评估的完成方式。 early-stop hook 决定在一系列非改进评估后停止训练。每一个都将根据您提供的 EvalSpec 执行,early-stop hook 与特定的评估规范无关,只关心评估周期的结果 -
@GPhilo 很可能我错了,但就我目前对stop_if_no_decrease_hook 的理解而言,
max_steps_without_decrease参数(int,最大训练步骤数,不减少给定指标)使用TrainSpec输入函数而不是EvalSpec输入函数?
标签: python tensorflow tensorflow-estimator