解释训练损失/准确性与验证损失/准确性

时间:2020-04-25 05:45:09

标签: python keras deep-learning neural-network mnist

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

有两个图形,火车acc与val acc和火车损耗与val损耗。我制作了4张图,因为我运行了两次,分别在model.fit参数中一次通过validation_split = 0.1 一次通过validation_data =(x_test,y_test)。具体的区别如下所示:

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时图形会发生变化?哪个会是更好的选择?

1 个答案:

答案 0 :(得分:2)

我将尝试提供答案

  1. 您可以看到,训练精度最终会比验证精度略高,而训练损失则比验证损失略低。这暗示着过度拟合,如果您训练更多的时代,差距应该会扩大。

    即使您使用具有相同优化器的相同模型,您也会注意到运行之间存在细微差别,因为权重是随机初始化的,并且随机性与GPU实现相关。您可以查看here了解如何解决此问题。

    不同的优化器通常会产生不同的图形,因为它们以不同的方式更新模型参数。例如,香草SGD将在所有参数和所有训练步骤中以恒定速率进行更新。但是,如果增加动量,则速率将取决于以前的更新,通常会导致更快的收敛。这意味着您可以以更少的迭代次数获得与香草SGD相同的精度。

  2. 图形将更改,因为如果随机分割训练数据,则数据将更改。但是对于MNIST,您应该使用数据集随附的标准测试拆分。