gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:29:56 26 4
gpt4 key购买 nike

关于使用 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):

enter image description here

using validation_split=0.1:

enter image description here

所以我的两个问题是:

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

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

最佳答案

我会尝试提供一个答案

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

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

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

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

关于python - 解释训练损失/准确性与验证损失/准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61421481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com