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

Han*_*n M 6 python machine-learning deep-learning tensorflow

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

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

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

Oli*_*ene 3

您需要创建一个验证 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)
Run Code Online (Sandbox Code Playgroud)

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