Skip to main content
 首页 » 编程设计

python之如何监控 TensorFlow 估计器训练中的验证损失

2024年09月03日27落叶无声

我想问一个问题,关于如何在 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”目录中。