我正在运行一个DNNClassifier,我正在训练时监控其准确性.来自contrib/learn的monitors.ValidationMonitor一直很好用,在我的实现中我定义它:
validation_monitor = skflow.monitors.ValidationMonitor(input_fn=lambda: input_fn(A_test, Cl2_test), eval_steps=1, every_n_steps=50)
Run Code Online (Sandbox Code Playgroud)
然后使用来自的电话:
clf.fit(input_fn=lambda: input_fn(A, Cl2),
steps=1000, monitors=[validation_monitor])
Run Code Online (Sandbox Code Playgroud)
哪里:
clf = tensorflow.contrib.learn.DNNClassifier(...
Run Code Online (Sandbox Code Playgroud)
这很好用.也就是说,验证监视器似乎已被弃用,并且类似的功能将被替换tf.train.SessionRunHook.
我是TensorFlow的新手,对我而言,这样的替换实现看起来似乎并不重要.任何建议都非常感谢.同样,我需要在特定步骤后验证培训.首先十分感谢.
我想问一个问题,在TensorFlow中estimators的训练过程中如何监控validation loss。我已经检查过一个类似的问题(在 Estimator 训练期间验证)之前问过,但它没有多大帮助。
如果我使用 estimator 来构建模型,我会给 Estimator.train() 函数一个输入函数。但是没有办法在训练过程中再添加validation_x、validation_y数据。因此,当训练开始时,我只能看到训练损失。当训练过程运行更长时间时,训练损失预计会减少。但是,此信息无助于防止过度拟合。更有价值的信息是验证损失。通常,验证损失是具有 epoch 数的 U 形。为了防止过度拟合,我们希望找到验证损失最小的时期数。
所以这是我的问题。在使用估计器的训练过程中,如何获得每个时期的验证损失?
假设你正在训练的自定义tf.estimator.Estimator与tf.estimator.train_and_evaluate在类似的设置使用验证数据集@ simlmx的:
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
)
Run Code Online (Sandbox Code Playgroud)
通常,当训练数据集的损失继续改善而不是验证数据集时,使用验证数据集来切断训练以防止过度拟合.
目前,tf.estimator.EvalSpec允许用户指定steps评估模型的数量(默认为100).
一个(如果可能不使用tf.contrib函数)如何指定在评估丢失n数量(n * steps)之后终止训练,其中评估损失没有改善,然后将"最佳"模型/检查点(由验证数据集确定)保存到唯一文件名(例如best_validation.checkpoint)