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

时间:2018-11-09 20:39:43

标签: python tensorflow machine-learning deep-learning

我想问一个问题,即如何在TensorFlow的估计器的训练过程中监视验证损失。我检查了之前问过的类似问题(validation during training of Estimator),但并没有太大帮助。

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

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

1 个答案:

答案 0 :(得分:1)

您需要创建一个验证input_fn,或者使用estimator.train()和estimator.evaluate()来替代,或者使用tf.estimator.train_and_evaluate()来进行简单化

x = ...
y = ...

...

# For example, if x and y are numpy arrays < 2 GB
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
val_dataset = tf.data.Dataset.from_tensor_slices((x_val_, y_val))

...

estimator = ...

for epoch in n_epochs:
    estimator.train(input_fn = train_dataset)
    estimator.evaluate(input_fn = val_dataset)

estimator.evaluate()将计算损失和在model_fn中定义的任何其他指标,并将事件保存在job_dir内部的新“ eval”目录中。