我正在尝试通过微调VGG16网络(预先在ImageNet上进行训练)在一个相当小的数据集(11000张图像,200个类别)上进行图像分类来进行转移学习。实际上我只是在修改VGG16网络的最后3个FC层。我在3个FC层中的两个上添加了丢失概率为0.5的丢失。损失与验证准确度之间的关系是什么?
所以,当我在这个网络上进行训练时,除了用原作者给出的VGG_MEAN值减去图像中的每个通道外,我没有做任何奇特的预处理。
因此,事情是培训似乎进行得很好,损失大幅下降并稳定在一定的价值附近,并且我正在监控网络对验证集(20%的数据)的预测准确性,具体数目为批次已经过培训。 我注意到平均验证的准确性没有显示出任何改进的趋势 - 并且平均验证准确性在整个培训过程中波动,当时我实际上希望它逐渐增加。在推断时,我确保不要拖动验证数据。
我试图降低学习速度,微调较少的层次,但无济于事。如果损失是代表模型是实际学习的代理人,那么为什么验证准确性的差异?
(1)这是因为我只有很少的训练数据开始? (2)最初的Imagenet数据集有1000个类,但是我的分类任务更加细化,并且具有原始数量的ImageNet类的1/5(考虑对鸟的种类或不同的灵长类进行分类)。这可能是一个问题吗? 我想从一些有这方面问题的工作经验的人员那里得到一些意见和反馈。
如果我理解的很好,你的损失函数正在减少,但你的验证损失不再下降,这表明你正在过度适合你的训练集。如果是这种情况,请尝试惩罚您的参数以避免过度拟合。 – Feras
向FC7和FC6层添加0.5的丢失不会改善任何事情。事实上,验证的准确性很差,我只是难倒了。 – user1050648