我正在尝试使用TensorFlow对象检测API来识别图片和视频中的特定对象(吉他)。
关于数据,我从OpenImage数据集中下载了图像,并导出了.tfrecord文件。我正在用不同的数字进行测试,但是现在让我们说训练集中有200张图像,评估集中有100张图像。
我正在使用“ ssd_mobilenet_v1_coco”作为起点并使用“ model_main.py”脚本来训练模型,以便获得训练和验证结果。
当我在TensorBoard中可视化训练进度时,得到以下训练结果:
分别。
我通常对计算机视觉并不陌生,并且想学习,所以我试图弄清楚这些图的含义。 训练损失按预期进行,并随着时间的流逝而减少。 在我的观点(可能是简单的)中,我期望验证损失从较高的值开始,随着训练的进行而减少,如果训练进行的时间过长并且模型开始过度拟合,则验证损失将再次增加。
但是在我的情况下,我没有看到验证曲线的这种行为,该曲线似乎基本上一直在上升(不包括波动)。
我训练模型的时间太短了,以至于看不到我期望的行为吗?首先我的期望错了吗?我误解了曲线吗?
答案 0 :(得分:0)
好,我通过将 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的初始值,结果太高了。
如果我确实注释掉了(以便学习计划程序处于活动状态),我想它不是从降低值开始而是从一个太高的值开始。
无论如何,现在它的工作情况要好得多,我希望如果有人遇到相同的问题,这会很有用。