深度神经网络训练过程中为什么验证集上波动很大_一个值得深思的问题?为什么验证集的loss会小于训练集的loss...

599bf68f6caa020b16924acb5838344d.png
编辑:zero 关注 搜罗最好玩的计算机视觉论文和应用,AI算法与图像处理 微信公众号,获得第一手计算机视觉相关信息

8740a3572bb0ee86342139266a4e31d0.png

在本教程中,您将学习在训练自己的自定义深度神经网络时,验证损失可能低于训练损失的三个主要原因。

我的验证损失低于训练损失!

怎么可能呢?

  • 我是否意外地将训练和验证loss绘图的标签切换了? 潜在地。 我没有像matplotlib这样的绘图库,因此将丢失日志通过管道传输到CSV文件,然后在Excel中进行绘图。 绝对容易发生人为错误。
  • 我的代码中有错误吗? 几乎可以确定。 我同时在自学Java和机器学习-该代码中肯定存在某种错误。
  • 我只是因为太疲倦而无法理解我的大脑吗? 也很有可能。 我一生中的睡眠时间不多,很容易错过一些明显的事情。

但是,事实证明,上述情况都不是——我的验证损失确实比我的训练损失低。

要了解您的验证loss可能低于训练loss的三个主要原因,请继续阅读!

为什么我的验证loss低于训练loss?

在本教程的第一部分中,我们将讨论神经网络中“loss”的概念,包括loss代表什么以及我们为什么对其进行测量。

在此,我们将实现一个基础的CNN和训练脚本,然后使用新近实现的CNN进行一些实验(这将使我们的验证损失低于我们的训练损失)。

根据我们的结果,我将解释您的验证loss可能低于训练loss的三个主要原因。

训练神经网络时的“loss”是什么?

51791cf894b4b3221a2af767529513ac.png
[1] 机器/深度学习的中的“loss”是什么? 为什么我的验证loss低于训练loss?

在最基本的层次上,loss函数可量化给定预测变量对数据集中输入数据点进行分类的“好”或“坏”程度。

loss越小,分类器在建模输入数据和输出目标之间的关系方面的工作就越好。

就是说,在某种程度上我们可以过度拟合我们的模型-通过过于紧密地建模训练数据(modeling the training data too closely),我们的模型将失去泛化的能力。

因此,我们寻求:

  1. 尽可能降低loss,从而提高模型精度。
  2. 尽可能快地这样子做,并减少超参数的更新/实验次数。
  3. 所有这些都没有过度拟合我们的网络,也没有将训练数据建模得过于紧密。。

这是一种平衡,我们选择loss函数和模型优化器会极大地影响最终模型的质量,准确性和通用性。

典型的损失函数(也称为“目标函数”或“评分函数”)包括:

  • Binary cross-entropy
  • Categorical cross-entropy
  • Sparse categorical cross-entropy
  • Mean Squared Error (MSE)
  • Mean Absolute Error (MAE)
  • Standard Hinge
  • Squared Hinge

对loss函数的全面回顾不在本文的范围内,但就目前而言,只需了解对于大多数任务:

  • loss衡量你的模型的“好(goodness)”
  • loss越小越好
  • 但你要小心别过拟合

要了解在训练自己的自定义神经网络时loss函数的作用,请确保:

  • 阅读参数化学习和线性分类简介。https://www.pyimagesearch.com/2016/08/22/an-intro-to-linear-classification-with-python/
  • 请阅读以下有关SoftMax分类器的教程。https://www.pyimagesearch.com/2016/09/12/softmax-classifiers-explained/
  • 关于多类SVM损失,请参阅本指南。https://www.pyimagesearch.com/2016/09/05/multi-class-svm-loss/

文件结构

从那里,通过tree命令检查项目/目录结构:

  $ tree --dirsfirst
  .
  ├── pyimagesearch
  │   ├── __init__.py
  │   └── minivggnet.py
  ├── fashion_mnist.py
  ├── plot_shift.py
  └── training.pickle
  ​
  1 directory, 5 files

今天我们将使用一个称为MiniVGGNet的更小版本的vggnet。pyimagesearch模块包括这个CNN。

我们的fashion_mnist.py脚本在fashion MNIST数据集上训练MiniVGGNet。我在之前的一篇博文中写过关于在时尚mnist上训练MiniVGGNet,所以今天我们不会详细讨论。

https://www. pyimagesearch.com/2019/ 02/11/fashion-mnist-with-keras-and-deep-learning/

今天的训练脚本将生成一个training.pickle文件,其中包含训练精度/loss历史记录。在下面的原因部分中,我们将使用plot_shift.py将训练loss图移动半个epoch,以证明当验证loss低于训练loss时,测量loss的时间起作用。现在让我们深入探讨三个原因来回答这个问题:“为什么我的验证loss比训练loss低?“。

原因1:在训练中应用正则化,但在验证/测试中未应用正则化

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值