我正在尝试创建一个tf模型,它可以检测任何图像中的任何手写。为了做到这一点,我在所有火车图片中制作了一个标签:编辑。这意味着,一个图像可以有这个标签很多次。
在用cpu训练了几个小时后,我没有得到预期的结果。模型看不到我在训练前给的任何模块。
我使用以下模型:
http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d6_coco17_tpu-32.tar.gz
问题是我用一个标签多次标记一个图像吗?
可能是使用cpu而不是gpu的问题?我目前有一个4gb的gpu,似乎还不够。我用2000步训练了模型,learning_rate是0. 006。我应该训练它更多吗?
有什么建议吗?
先谢谢你了。
编辑
以下是训练模型的tensorboard屏幕截图:
1条答案
按热度按时间vktxenjb1#
CPU与GPU
GPU的唯一优势是训练速度更快。它应该不会对预期结果产生任何影响。只是需要更长的时间。不过,对于某些模型,差异可能很大。监控训练可能会给予你更多的洞察力。
培训监控
什么意思是你没有得到预期的结果?它与你预期的有什么不同?
我建议你使用某种监控工具,比如Tensorboard,来监控训练和验证数据集的丢失和度量,如果你还没有这样做的话。这将为你实时提供关于训练的宝贵信息。
管道调试
当你的模型看起来没有学习到任何东西时,你必须开始调试。你可以按照下面的步骤来确保这些都不是你的问题:https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607
我特别喜欢在单个批次上过拟合模型。这个测试告诉我算法管道是否正确,包括预处理、模型和评估。结果应该是,在单个定型批次上的评估应该给予你一个非常好的分数,而对于其余数据,分数将很差,因为模型将在单个批次上过拟合。
问题定义
有时候,可能是问题的定义错误,你能澄清一下你的标签是什么吗?我不太明白。如果是常见的问题,那么你可以在网上搜索一下,看看它通常是如何定义的。
编辑
损失函数
一般来说,你希望所有的损失函数都下降,但在你的例子中,损失函数在最初的几百步中会上升,这并不一定意味着出现了问题,因为有时候训练开始时需要很短的时间才能稳定下来,尽管如此,三角形表示丢失的是NaN,这意味着有问题,我建议使用
tf.keras.callbacks.TerminateOnNaN
回调函数立即检测丢失的NaN,你的训练会立刻终止。指标
从损失函数本身,很难判断模型的性能如何。在每一个机器学习任务中,你必须能够理解模型的性能。度量标准正是为了这个目的而使用的。在这种情况下(对象检测),我建议使用IoU来确定预测框与目标框的重叠程度,以及
precision
和recall
,用于评估预测框是否包含手写文本的二元分类的性能。