【问题标题】:Difference between training and testing accuracy+ Tensorflow tutorial训练和测试准确率的区别+ Tensorflow教程
【发布时间】:2018-06-12 05:41:02
【问题描述】:

这个 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)

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

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

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

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

【问题讨论】:

    标签: python tensorflow deep-learning mnist


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的。另外,请参阅帖子的前两行。本教程使用 60K 图像的 MNIST 数据库,并分别创建 50k 图像的训练集和 10k 图像的测试集。代码执行结束时打印的准确度是 10k 测试集上模型的准确度对吧?
    • 如果可能,也请参阅此问题。 stackoverflow.com/questions/50884631/tensorflow-model-accuracy
    【解决方案2】:

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

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

    【讨论】:

    • 所以我可以通过这样做来检测过拟合吗?另外,我有一个关于我刚刚输入的步骤数的小问题。您能否也解决一下这个问题?
    【解决方案3】:

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

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

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

    【讨论】:

    • 好的。另外,请参阅帖子的前两行。本教程使用 60K 图像的 MNIST 数据库,并分别创建 50k 图像的训练集和 10k 图像的测试集。代码执行结束时打印的准确度是 10k 测试集上模型的准确度对吧?
    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 2018-02-08
    • 2020-10-17
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多