课堂预测的训练准确性与计算准确性之间的差异

时间:2020-02-21 16:19:37

标签: python tensorflow neural-network

我已经用11200张图像的数据集训练了我的神经网络,其验证准确性为96%。我保存了模型并将其权重加载到相同的神经网络中。我以阵列的形式选择了738个数据集的图像,并尝试通过模型预测每个图像的类别,并将它们与真实标签进行比较,然后再次计算出准确率,结果是74%。这里有什么问题?我猜它的准确性应该再次达到96%。

prelist=[]
for i in range(len(x)):
    prediction = model.predict_classes(x[i])
    prelist.append(prediction)
count = 0
for i in range(len(x)):
    if(y[i] == prelist[i]):
        count = count + 1
test_precision = (count/len(x))*100
print (test_precision)

当我在用于训练神经网络的11200张图像上使用预测类并将其结果与真实标签进行比较时,再次计算出其准确性,其准确性为91%。我在这个问题上使用AlexNet和二进制分类。谢谢。


P.S:我附加了我的模型图,我想这并不过分拟合,最后我附加了一个过度拟合的模型图。

Loss Plot Accuracy Plot

一个过度拟合的损失图就是这样

enter image description here

2 个答案:

答案 0 :(得分:0)

首先,您不应该在训练过程中使用的图像上评估准确性得分。

评估模型总是归结为将可用数据分为三组:训练,验证和测试。您在训练数据上进行训练,并在验证数据上评估模型,以测量损失并在训练过程中优化/微调网络配置。一旦模型准备就绪,就可以在测试数据上对其进行测试。

培训结束后,您可以评估测试仪的准确性。
如果您的训练精度为〜90%时仍然是〜70%,则很可能是该模型过度适合了验证集。为了解决这个问题,您可以诉诸

  • 获取更多培训数据
  • 添加权重正则化
  • 添加droput
  • 减少网络容量

答案 1 :(得分:0)

如Stuart Russell和Peter Norvig在“人工智能:一种现代方法”中指出的那样

...您仍然想衡量未见数据的性能,以此来 选择一个良好的假设,然后将可用数据... 训练集和验证集。

  • 训练数据:您总是在训练数据上训练模型。该模型可以使用真实的标签,并且该模型有可能完全适合火车数据并且具有较高的火车准确性。
  • 验证数据::如果您要访问模型的质量,请根据看不见的数据评估模型。此数据通常称为验证数据,因为您可以在训练期间调整炒作参数,以获得更好的验证准确性。这也可能导致过度拟合(通过超参数)超过验证数据。
  • 测试数据::您可以使用测试数据对模型进行最终测量,并将这些结果作为模型性能发布。

在训练过程中,通常会在验证损失增加但火车损失减少时,在每个时期绘制训练和验证损失(或准确性),然后停止训练。

您显然过度拟合,请参见下面的图

enter image description here

如果数据太小而无法拆分以进行训练验证测试,该怎么办?:使用k倍交叉验证策略。

相关问题