我试图通过微调VGG16网络(在ImageNet上预训练)来进行转移学习,以便在相当小的数据集(11000个图像,200个类别)上进行图像分类。我实际上只训练修改后的VGG16网络的最后3个FC层。我已经在3个FC层中的两个上添加了丢失,概率为0.5。
所以,当我在这个网络上进行培训时,除了用原始作者给出的VGG_MEAN值减去图像中的每个通道外,我没有做任何花哨的预处理。
所以问题是培训似乎进展顺利,损失大幅下降并稳定在一定值附近,我在监测验证集上的网络预测准确性(20%的数据) )经过特定批次的培训后。 我注意到平均验证准确度没有显示任何改进趋势 - 当我实际上希望这种情况逐渐增加时,平均验证准确度在整个培训期间波动。在推理时,我确保不会将验证数据洗牌。
我已经尝试过降低学习率,微调更少的层数但无济于事。如果丢失是表明模型实际学习的替代品,那么为什么验证准确性存在差异?
(1)是否因为我开始时只有非常少的训练数据? (2)原始的Imagenet数据集有1000个类,但我的分类任务更精细,并且具有原始ImageNet类数量的1/5(想想对鸟类物种或不同灵长类动物进行分类)。这可能是个问题吗? 我希望得到一些有关此类问题的人的意见和反馈。
答案 0 :(得分:1)
我知道(训练)损失的价值与列车准确性有很大关系。如果在训练时损失减少,训练准确性将增加。但是火车损失与验证准确性之间没有很强的关系。如果火车损失正在减少并且验证准确性在增加,那么这就是我们所期望的。但是如果火车损失减少而验证精度下降到饱和,那么可能会发生过度拟合。在这种情况下,应停止训练并调整一些参数,如正规化和辍学率的重量衰减。
因此验证准确性不能直接替换为训练损失。如果可能的话,应该使用验证准确性,而不仅仅是看到学习损失的曲线。以上是我的理解。
答案 1 :(得分:0)
事实证明,我面对的是一个细粒度的"分类问题。鸟类物种的图像看起来非常相似,这给网络学习带来了问题。