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

时间:2018-06-29 19:47:15

标签: python tensorflow machine-learning tensorboard

根据我对机器学习的理解(尽管我很陌生),需要在训练过程中对模型进行评估。这样可以避免过度拟合或减少不良预测的可能性。

我试图修改提供的鲍鱼示例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可视化的训练结果是: enter image description here

如您所见,训练结束时只有一个评估(蓝点)

虽然我不确定损失的减少是否是由于缺乏评估,但我想知道如何操作代码,以便可以在培训期间执行评估过程。

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

1 个答案:

答案 0 :(得分:0)

  

在训练过程中需要对模型进行评估。这样可以避免过度拟合或减少不良预测的可能性。

就其本身而言,在训练时进行评估并没有任何作用,但它使操作员可以根据从未见过的数据跟踪模型的性能。然后,您可以相应地调整超级参数(例如学习率或正则化因子)。

  

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

您提供的代码段仅经过一轮培训即可进行评估。您应该针对多个时期训练模型,以获得更好的性能。

另一方面,您应该创建我们称为“验证集”的内容,它是训练数据的一小部分,算法不会对其进行训练以进行评估。使用当前的方法,您可能会过度拟合测试集。仅应很少使用测试集来评估模型的实际泛化能力。