繁体   English   中英

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

[英]Interpreting training loss/accuracy vs validation loss/accuracy

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

有两张图,train acc vs val acc 和 train loss vs val loss。 我制作了 4 个图表,因为我运行了两次,一次使用 validation_split = 0.1一次使用 model.fit 参数中的 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):

在此处输入图像描述

using validation_split=0.1:

在此处输入图像描述

所以我的两个问题是:

1.) 如何解释 train acc vs val acc 和 train loss vs val acc 图? 就像它准确地告诉我什么以及为什么不同的优化器具有不同的性能(即图表也不同)。

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

我将尝试提供答案

  1. 您可以看到,接近尾声的训练准确度略高于验证准确度,训练损失略低于验证损失。 这暗示了过度拟合,如果你训练更多的时期,差距应该会扩大。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM