Tensorflow 对象检测 API - 验证丢失行为
Posted
技术标签:
【中文标题】Tensorflow 对象检测 API - 验证丢失行为【英文标题】:Tensorflow object detection API - validation loss behaviour 【发布时间】:2020-01-31 20:52:57 【问题描述】:我正在尝试使用 TensorFlow 对象检测 API 来识别图片和视频中的特定对象(吉他)。
关于数据,我从 OpenImage 数据集下载了图像,并导出了 .tfrecord 文件。我正在使用不同的数字进行测试,但现在假设我在训练集中有 200 张图像,在评估集中有 100 张。
我正在使用“ssd_mobilenet_v1_coco”作为起点和“model_main.py”脚本来训练模型,这样我就可以得到训练和验证结果。
当我在 TensorBoard 中可视化训练进度时,我得到以下训练结果:
和验证损失:
分别。
我通常是计算机视觉的新手并尝试学习,所以我试图弄清楚这些图的含义。 训练损失按预期进行,随着时间的推移而减少。 在我(可能很简单)的观点中,我期望验证损失从高值开始,随着训练的进行而减少,然后如果训练时间过长并且模型开始过度拟合,则再次开始增加。
但就我而言,我看不到验证曲线的这种行为,它似乎基本上一直呈上升趋势(不包括波动)。
我训练模型的时间是否太短而无法看到预期的行为?我的期望一开始就错了吗?我是否误解了曲线?
【问题讨论】:
【参考方案1】:好的,我通过将 initial_learning_rate 从 0.004 降低到 0.0001 来修复它。 考虑到验证损失的剧烈波动,这是显而易见的解决方案,但起初我认为它不起作用,因为配置文件中似乎已经有一个学习率调度程序。 然而,紧随其后(在配置文件中)有一个 num_steps 选项,并指出
# Note: The below line limits the training process to 200K steps, which we
# empirically found to be sufficient enough to train the pets dataset. This
# effectively bypasses the learning rate schedule (the learning rate will
# never decay). Remove the below line to train indefinitely.
老实说,我不记得我是否注释掉了 num_steps 选项...如果我没有注释掉,看来我的学习率保持在初始值 0.004,结果太高了。 如果我确实将其注释掉(以便学习调度程序处于活动状态),我猜想它不是减少,而是从过高的值开始。 无论如何,它现在工作得更好了,我希望这对遇到同样问题的人有用。
【讨论】:
我猜,不是减少,而是从太高的值开始。???你是检查自己还是胡乱猜测? 不确定我理解你的意思,但初始损失值几乎是随机的,因为它是在权重优化之前计算的,并且权重是随机初始化的。如果训练成功,验证和训练损失应该会减少(如果你开始对训练数据过度拟合,验证会再次增加),这确实是我降低学习率后得到的结果。这只是一个随机测试,我再也没有这些图了,所以你必须相信我的话……或者我可以向你展示类似实验的图 :) 是的,理想情况下验证和训练损失应该减少..正确..蝙蝠我说的是验证损失..从图中可以看出它从一开始就一直在增加?没有意义 问题是没有关于如何在 tensorboard 中评估新对象检测 api 的在线文档......目前使用 tf=v14 和 api v1.13 我能找到的唯一解决方案是datascience.stackexchange.com/questions/31994/…以上是关于Tensorflow 对象检测 API - 验证丢失行为的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Tensorflow 2 对象检测 API 恢复微调模型以进行测试?