相关疑难解决方法(0)

使用Estimators时,使用tf.train.SessionRunHook替换验证监视器

我正在运行一个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的新手,对我而言,这样的替换实现看起来似乎并不重要.任何建议都非常感谢.同样,我需要在特定步骤后验证培训.首先十分感谢.

validation tensorflow

20
推荐指数
1
解决办法
3755
查看次数

如何在 TensorFlow 中的估算器训练中监控验证损失?

我想问一个问题,在TensorFlow中estimators的训练过程中如何监控validation loss。我已经检查过一个类似的问题(在 Estimator 训练期间验证)之前问过,但它没有多大帮助。

如果我使用 estimator 来构建模型,我会给 Estimator.train() 函数一个输入函数。但是没有办法在训练过程中再添加validation_x、validation_y数据。因此,当训练开始时,我只能看到训练损失。当训练过程运行更长时间时,训练损失预计会减少。但是,此信息无助于防止过度拟合。更有价值的信息是验证损失。通常,验证损失是具有 epoch 数的 U 形。为了防止过度拟合,我们希望找到验证损失最小的时期数。

所以这是我的问题。在使用估计器的训练过程中,如何获得每个时期的验证损失?

python machine-learning deep-learning tensorflow

6
推荐指数
1
解决办法
2593
查看次数

TensorFlow 1.10+自定义估算器使用train_and_evaluate提前停止

假设你正在训练的自定义tf.estimator.Estimatortf.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)

python tensorflow tensorflow-estimator

5
推荐指数
1
解决办法
2180
查看次数