解读训练失误率与验证失误率的关系

问题描述 投票:0回答:1

我有几个问题,关于使用Lenet5网络在MNIST上解释某些优化器的性能,以及验证损失准确度与训练损失准确度图到底告诉我们什么.因此,一切都在Keras中使用标准的LeNet5网络完成,并且运行了15个epochs,批次大小为128。

有两张图,训练acc与val acc和训练损失与val损失。我做了4张图,因为我跑了两次。一次,validation_split = 0.1一次,validation_data = (x_test, y_test) 在model.fit参数中。具体的差异在这里显示。

train = model.fit(x_train, y_train, epochs=15, batch_size=128, validation_data=(x_test,y_test), verbose=1)
train = model.fit(x_train, y_train, epochs=15, batch_size=128, validation_split=0.1, verbose=1)

这是我制作的图表

using validation_data=(x_test, y_test):

enter image description here

using validation_split=0.1:

enter image description here

所以我的两个问题是:

1.) 我如何解释火车acc与val acc和火车损失与val acc这两个图?比如它到底告诉了我什么,为什么不同的优化器有不同的性能(即图也不同)。

2.) 为什么当我使用validation_split时,图形会发生变化?使用哪一个会是更好的选择?

python keras deep-learning neural-network mnist
1个回答
2
投票

我将尝试提供一个答案

  1. 你可以看到,在最后,训练精度略高于验证精度,训练损失略低于验证损失。这暗示着过度拟合,如果你训练更多的纪元,差距应该会扩大。

    即使你使用相同的模型和相同的优化器,你也会注意到运行之间的轻微差异,因为权重是随机初始化的,以及与GPU实现相关的随机性。你可以看看 此处 以了解如何解决这个问题。

    不同的优化器通常会产生不同的图,因为它们更新模型参数的方式不同。例如,vanilla SGD会对所有参数和所有训练步骤以恒定的速率进行更新。但如果你添加动量,速率将取决于之前的更新,通常会导致更快的收敛。这意味着你可以在较低的迭代次数中实现与香草SGD相同的准确性。

  2. 图形会改变,因为如果你随机拆分,训练数据会改变。但对于MNIST,你应该使用数据集提供的标准测试分割。

© www.soinside.com 2019 - 2024. All rights reserved.