【发布时间】:2017-03-23 16:09:19
【问题描述】:
我正在尝试通过微调 VGG16 网络(在 ImageNet 上预训练)来进行迁移学习,以便在更小的数据集(11000 张图像,200 个类别)上进行图像分类。我实际上只训练修改后的 VGG16 网络的最后 3 个 FC 层。我在 3 个 FC 层中的两个上添加了 dropout,概率为 0.5。
所以,当我在这个网络上进行训练时,除了用原作者给出的 VGG_MEAN 值减去图像中的每个通道外,我没有做任何花哨的预处理。
所以问题是训练似乎进展顺利,损失大幅下降并稳定在某个值附近,并且我正在监控网络在特定批次数量后对验证集(20% 的数据)的预测准确性受过训练。 我注意到平均验证准确度没有显示出任何改进的趋势——平均验证准确度在整个训练过程中波动,而我实际上希望这会逐渐增加。我确保在推理时不要打乱验证数据。
我曾尝试降低学习率,微调更少的层但无济于事。如果损失是表明模型实际上正在学习的替代指标,那么为什么会出现验证准确度的差异?
(1) 是因为我一开始只有很少的训练数据吗? (2) 原始 Imagenet 数据集有 1000 个类别,但我的分类任务更细粒度,并且有原始 ImageNet 类别数量的 1/5(想想分类鸟类的种类,或不同的灵长类动物)。这可能是一个问题吗? 我希望有一些解决此类问题经验的人的意见和反馈。
【问题讨论】:
-
如果我理解得很好,您的损失函数正在减少,但您的验证损失不再下降,这表明您过度拟合您的训练集。如果是这种情况,请尝试惩罚您的参数以避免过度拟合。
-
向 FC7 和 FC6 层添加 0.5 的 dropout 并没有改善任何东西。事实上,验证的准确性太差了,我简直被难住了。
标签: deep-learning