如何在 Tensorflow 的训练之间进行评估

Posted

技术标签:

【中文标题】如何在 Tensorflow 的训练之间进行评估【英文标题】:How to put evaluations in between trainings in Tensorflow 【发布时间】:2018-12-09 01:08:06 【问题描述】:

根据我对机器学习的理解(虽然我对它很陌生),模型的评估需要在训练过程中进行。这将避免过度拟合或减少错误预测的可能性。

我尝试修改 Tensorflow 官方网站提供的鲍鱼示例以适合我的项目,我发现代码仅在模型训练完成后才进行一次评估。

这对我来说很奇怪,因为只有一个评估似乎使“评估阶段”变得无用。换句话说,如果训练已经完成,评估有什么用?建立一个更好的模型无济于事,不是吗?

这是我的代码的一部分:

 nn = tf.estimator.Estimator(model_fn=model_fn, params=model_params, model_dir='/tmp/nmos_self_define')

  train_input_fn = tf.estimator.inputs.numpy_input_fn(
      x="x": train_features_numpy,
      y=train_labels_numpy,
      batch_size = 1,
      num_epochs= 1,
      shuffle=True)

  # Train
  nn.train(input_fn=train_input_fn)

  test_input_fn = tf.estimator.inputs.numpy_input_fn(
      x="x": test_features_numpy,
      y=test_labels_numpy,
      batch_size = 1,
      num_epochs= 1,
      shuffle=False)

  ev = nn.evaluate(input_fn=test_input_fn)
  print("Loss: %s" % ev["loss"])
  print("Root Mean Squared Error: %s" % ev["rmse"])    

而通过 Tensorboard 可视化的训练结果是:

如您所见,在训练结束时只发生了一次评估(蓝点)

虽然我不确定损失没有减少是不是因为缺乏评估,但我想知道如何操作代码,以便在训练期间执行评估过程。

感谢您抽出宝贵时间阅读此问题,我很乐意就此问题进行讨论,无论是概念上还是代码方面

【问题讨论】:

【参考方案1】:

模型的评估需要在训练过程中进行。这将避免过度拟合或减少错误预测的可能性。

就其本身而言,在训练时进行评估并不能做任何事情,但它允许操作员跟踪模型在其从未见过的数据上的表现。然后您可以相应地调整超参数(例如学习率或正则化因子)。

我发现代码只在模型训练完成后才进行一次评估。

您提供的代码 sn-p 仅在一个 epoch 训练后运行评估。您应该训练您的模型进行多个 epoch 以获得更好的性能。

附带说明,您应该创建我们所说的“验证集”,它是训练数据的一小部分,算法不会根据这些数据进行训练以进行训练评估。使用您当前的方法,您可能会过度拟合您的测试集。测试集应该很少用于评估模型的真正泛化能力。

【讨论】:

以上是关于如何在 Tensorflow 的训练之间进行评估的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tensorflow 2.0 中更改用于训练和评估的图像数量?

如何在 Tensorflow Estimator 的每个全局步骤中获取训练损失并评估损失?

tensorflow 如何在线训练模型

tensorflow 使用混淆矩阵进行评估

使用 TensorFlow CNN 进行图像分类

AI系统架构之算法平台设计