在一个已有网络的末端再加一层全连接层,该如何微调?

在网络末端新加一个全连接层用来作为分类的特征层,该怎么微调的,固定前面几层的参数吗,还是直接训练哪.发现直接训练loss基本不降,幅度很小
已邀请:

B-Kalasiky

赞同来自:

学习率是不是太大了?微调要很小的学习率

Evence

赞同来自:

看你的loss有多大了,这个和你的标签有关。是多分类的还是而分类的呢。你添加的分类层就是输出label是0、1、2、3……这样么。

你可以用已有网络的model作为你的预训练模型,后面加一层,带上初始化方式,前几层可以冻结不更新权值参数(在你的train.prototxt里的参数层可以设置这个开关),后面你觉的需要更新的层可以设置不冻结更新,微调的话可以适当调小一些学习率,让loss下降更稳一些,一般可以尝试为从头训练学习率的0.1倍。

过程中可以记录log日志,用matlab画出train loss和test loss图以及accuracy图,如果loss下降快,到小瓶颈了;,你可以停下来保存一个caffemodel,再调小学习率再训练。或者有经验就在solver.prototxt里设置后多少次迭代后学习率的改变方式。

如果从头训练的话一般效果一般不太好,波动会很大,除非你有很大的样本量大量迭代训练。如果要尝试的话学习率不用和微调那么小,多画图对比,找到合适的训练方式。

要回复问题请先登录注册