验证和训练不会同时收敛,但验证仍然会收敛

Posted

技术标签:

【中文标题】验证和训练不会同时收敛,但验证仍然会收敛【英文标题】:validation and training don't converge at the same time, but validation still converges 【发布时间】:2019-01-10 22:17:06 【问题描述】:

https://github.com/wenxinxu/resnet-in-tensorflow#overall-structure

上面的链接是 cifar10 的 Resnet 模型。

我正在修改上述代码以使用 Resnet 和 Cifar10 作为训练/验证数据集进行对象检测。 (我知道数据集用于对象分类)我知道这听起来很奇怪,但请听我说。我使用 Cifar10 进行训练和验证,然后在测试期间使用滑动窗口方法,然后将每个窗口分类为 10 个类 +“背景”类之一。

对于背景类,我使用了 ImageNet 中的图像。我使用以下关键字搜索 ImageNet:建筑、景观、小路、山、天空、海洋、家具、森林、房间、商店、地毯和地板。然后我尽可能多地清理坏图像,包括包含 Cifar10 类的图像,例如,我删除了一些包含狗的“地板”图像。

我目前正在 Floydhub 中运行结果。我正在运行的总步骤是 60,000,这是链接中“训练曲线”下的部分表明结果开始巩固并且不会进一步收敛(我亲自运行此代码,我可以支持声明)

我的问题是:

    是什么原因导致训练和验证数据在同一步骤突然下降? 如果(或有可能)训练和验证数据在同一步骤中没有以类似步骤的方式收敛怎么办?我的意思是,例如,训练步数下降到大约 40,000 步,而验证只是收敛而没有降级? (顺利收敛)

【问题讨论】:

【参考方案1】:

    突然下降是由 40k 步发生的学习率衰减引起的(您可以在 hyper_parameters.py 中找到此参数)。学习率突然除以 10,这使您可以更精确地调整参数,在这种情况下,这会大大提高您的性能。您仍然需要具有相当大学习率的第一部分来为您的参数进入“好”区域,然后学习率小 10 倍的部分将对其进行改进并在该区域中为您的参数找到一个非常好的位置.

    这会令人惊讶,因为 40k 之前和之后之间存在明显差异,这会以相同的方式影响训练和验证。从那时起,您仍然可以看到不同的行为:例如,您可能会因为 LR 太小而开始过度训练,并且看到您的训练错误下降而验证上升,因为您所做的改进对训练数据来说过于具体。

【讨论】:

非常感谢。这其实是我第一次使用学习率衰减。

以上是关于验证和训练不会同时收敛,但验证仍然会收敛的主要内容,如果未能解决你的问题,请参考以下文章

GAN 无法同时与鉴别器和生成器损失收敛到 0

神经网络已经收敛的证据? [关闭]

模型不收敛的原因

为啥感知器学习算法不会收敛?

在多标签图像分类任务中,哪个损失函数会收敛得很好?

使用 PyBrain 进行神经网络训练不会收敛