我想问一个问题,关于如何在 TensorFlow 的估计器训练过程中监控验证损失。我检查了一个类似的问题 ( validation during training of Estimator ) 之前问过,但没有太大帮助。
如果我使用估算器构建模型,我会为 Estimator.train() 函数提供一个输入函数。但是没办法在训练过程中再加入validation_x,validation_y数据。因此,当训练开始时,我只能看到训练损失。当训练过程运行时间更长时,训练损失预计会减少。但是,此信息对防止过度拟合没有帮助。更有值(value)的信息是验证损失。通常,验证损失是带有 epoch 数的 U 形。为了防止过拟合,我们想找到验证损失最小的 epoch 数。
所以这是我的问题。如何在使用估计器的训练过程中获得每个时期的验证损失?
请您参考如下方法:
您需要创建一个验证 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”目录中。
