此张量流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&的值#34; 到 train_data 并提供训练数据进行测试,它会给我培训设置的准确性吗?
如果没有,我如何检查我的模型是否过度拟合我的数据集?
步数如何影响准确度? 就像我训练它20000步然后如果我训练它为另一个100.为什么它会改变准确性?是因为权重再次计算?那么做这样的事情会是明智的吗?
mnist_classifier.train(
input_fn=train_input_fn,
steps=20000,
hooks=[logging_hook])
答案 0 :(得分:1)
通常你有3个数据集,1个用于训练,1个用于验证,1个用于测试。所有这些数据集必须是唯一的,训练集的图像可能不会出现在验证或测试集等中。您使用训练集进行训练,并在每个时期之后,使用验证数据验证模型。优化器将总是尝试更新权重以对训练数据进行完美分类,因此训练精度将变得非常高(> 90)。验证数据是模型以前从未见过的数据,并且在每个时期(或x步数)之后完成,以显示模型对数据的反应程度以前没有看到过,这表明模型将会有多好改善加班时间。
训练越多,训练精度就越高,因为优化器会尽力将该值提高到100%。不更新权重的验证数据也会增加加班时间,但不会持续增加。虽然训练准确性不断提高,但验证准确性可能会停止提高。验证准确度随时间降低的那一刻,那么你就会过度拟合。这意味着该模型过于关注训练数据,并且如果它与训练集不同,它就无法正确地对另一个角色进行分类。
在您使用测试集的所有培训结束时,这将确定模型在新数据上的实际准确性。
@xmacz:我还没有添加评论,只有答案所以我只是更新我的答案。是的,我检查了源代码,您的第一行代码在测试数据上测试模型
答案 1 :(得分:0)
evaluate
只是一个函数,它对输入数据进行一些数值活动并产生一些输出。如果您使用它来测试数据,它应该提供测试准确性,如果您输入训练数据,它应该输出训练准确性。
在一天结束时,它只是数学。输出直观的内容是您必须确定的。
答案 2 :(得分:0)
如何知道您的模型是否过度拟合是您在训练模型时所做的事情。您必须设置另一个名为验证数据集的集合,该集合与测试和培训集不同。数据集的典型分割为70%-20%-10%,分别用于培训,测试和验证。
在培训期间,您将在验证数据集上测试模型的每n个步骤。在第一次迭代期间,验证集上的分数会变得更好,但在某些时候它会变得更糟。你可以使用这些信息来阻止你的模特开始过度训练时的训练,但做正确的是一门艺术。例如,你可以在5次测试后停止,你的准确度一直在下降,因为有时你可以看到它变得更糟,但在下一次测试中它会变得更好。很难说,这取决于很多因素。
关于你的第二个问题,迭代另外100个步骤可能会使你的模型更好或更差,这取决于它是否过度拟合,所以我担心这个问题没有明确的答案。权重很少会停止变化,因为迭代/步骤正在“移动”它们,无论好坏。同样,很难说如何获得好的结果,但你可以尝试提前停止使用验证集,正如我之前提到的那样。