验证和培训不能同时收敛,但是验证仍然收敛

时间:2018-08-03 04:52:02

标签: python tensorflow classification object-detection resnet

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

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

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

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

我目前正在Floydhub中运行结果。我正在执行的步骤总数为60,000,这是链接中“训练曲线”下的部分,表明结果开始合并并且不再进一步收敛(我亲自运行此代码,因此可以对索赔进行备份)

我的问题是:

  1. 大约在同一步骤发生的训练和验证数据突然下降的原因是什么?
  2. 如果(或有可能)训练和验证数据在大约同一步骤中没有以类似步骤的方式收敛?我的意思是,例如,培训减少到大约40,000,而验证只是收敛而没有降低? (平滑收敛)

1 个答案:

答案 0 :(得分:1)

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

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