训练和测试精度的区别+Tensorflow教程

Difference between training and testing accuracy+ Tensorflow tutorial

这个tensorflow tutorial中的代码使用这部分代码来计算验证准确率对吗?

eval_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x": eval_data},
      y=eval_labels,
      num_epochs=1,
      shuffle=False)
  eval_results = mnist_classifier.evaluate(input_fn=eval_input_fn)
  print(eval_results)

问题:所以如果我必须计算训练集的准确性,即查看我的模型是否过度拟合我的训练集数据,如果我更改 [=21 的值=]"x" 到 train_data 并提供训练数据进行测试,它会给我训练集的准确性吗?

如果不是,我如何检查我的模型是否过度拟合我的数据集?

步数如何影响准确性? 就像我已经训练了 20000 步,然后又训练了 100 步。为什么它会改变准确性?是因为权重又重新计算了吗?那么做这样的事情是否明智?

mnist_classifier.train(
      input_fn=train_input_fn,
      steps=20000,
      hooks=[logging_hook])

evaluate 只是一个函数,它对输入数据进行一些数值活动并产生一些输出。如果你用它来测试数据,它应该给出测试精度,如果你输入训练数据,它应该输出训练精度。

归根结底,这只是数学。 直觉上 的输出结果是您必须确定的。

如何知道你的模型是否过拟合是你在训练模型时要做的事情。您必须分开另一组称为验证数据集,该数据集不同于测试集和训练集。典型的数据集分割为 70%-20%-10%,分别用于训练、测试和验证。

在训练过程中,每 n 步你就在验证数据集上测试你的模型。在第一次迭代期间,验证集上的分数会变得更好,但在某些时候它会变得更糟。当您的模型开始过度拟合时,您可以使用此信息停止训练,但正确处理是一门艺术。例如,你可以在 5 次测试后停止,你的准确性已经连续下降,因为有时你可以看到它变得更糟,但在下一次测试中它会变得更好。不好说,要看很多因素。

关于你的第二个问题,再迭代100步可能会使你的模型更好或更差,这取决于它是否过拟合,所以恐怕这个问题没有明确的答案。权重很少会停止变化,因为 iterations/steps 是 "moving" 他们,无论好坏。同样,很难说如何获得好的结果,但您可以尝试使用验证集提前停止,正如我之前提到的那样。

通常你有 3 个数据集,1 个用于训练,1 个用于验证,1 个用于测试。所有这些数据集都必须是唯一的,训练集的图像可能不会出现在验证或测试集中,等等。您使用训练集进行训练,并且在每个时期之后,您使用验证数据验证模型。优化器将始终尝试更新权重以对训练数据进行完美分类,因此训练准确率将非常高(>90)。验证数据是模型以前从未见过的数据,它在每个时期(或 x 步数)之后完成,以显示模型对以前从未见过的数据的反应有多好,这表明模型将随着时间的推移而改进.

训练越多,训练准确率就会越高,因为优化器会尽最大努力使该值达到 100%。不更新权重的验证数据也会随着时间的推移而增加,但不是连续增加。虽然训练准确性不断提高,但验证准确性可能会停止提高。一旦验证准确度随时间下降,那么你就过度拟合了。这意味着该模型过于关注训练数据,如果它与训练集不同,则无法正确分类另一个字符。

在您使用测试集的所有训练结束时,这将决定您的模型在新数据上的实际准确性。

@xmacz:我还不能添加评论,只能添加答案所以我只是更新我的答案。是的,我检查了源代码,你的第一行代码在测试数据上测试了模型