解释培训损失/准确度与验证损失/准确度

2024-04-25 19:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

关于使用Lenet5网络解释MNIST上某些优化器的性能,我有几个问题,验证损失/精度与培训损失/精度图到底告诉了我们什么。 因此,一切都是在Keras中使用标准的LeNet5网络完成的,它运行了15个时代,批处理大小为128

有两个图表,列车acc与val acc和列车损失与val损失。我制作了4个图表,因为我在model.fit参数中运行了两次,一次使用验证\u split=0.1一次使用验证\u data=(x\u测试,y\u测试)。具体而言,差异如下所示:

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。)当我使用验证_分割时,为什么图形会发生变化?使用哪一个更好?


Tags: test网络datamodel图表精度trainval
1条回答
网友
1楼 · 发布于 2024-04-25 19:28:46

我将尝试提供一个答案

  1. 您可以看到,在接近结束时,训练精度略高于验证精度,训练损失略低于验证损失。这暗示着过度适应,如果你训练了更多的时期,差距应该会扩大

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

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

  2. 图形将发生变化,因为如果随机拆分,训练数据将发生变化。但对于MNIST,您应该使用数据集提供的标准测试拆分

相关问题 更多 >