您的位置:首页 > 理论基础 > 计算机网络

caffe微调网络时的注意事项(持续更新中)

2016-05-04 11:04 281 查看
最近在微调遇到了一些困难,在此做一个记录,与大家分享!

     第一个,微调数据的准备

     微调的目的是使别人训练好的模型更适合自己的数据,因此,微调的数据一般都是适合自己应用的数据。但是,大牛建议,在微调是不要全部使用自己的数据,应该将自己的数据和原始训练数据混合在一起,并逐步增加自己的数据的比例,这样效果可能会好一些。

     第二个,网络的修改

     微调是在已经训练好的模型的基础上,用自己的数据继续训练网络。那为什么叫微调为网络而不是继续训练网络。个人觉得微调指的是可以局部调整参数,也就是我们可以在微调是可以只调节某一层的权重,一般只调节全连接层的权重。那么要怎样实现这个目的呢?这就需要我们修改网络配置文件中的lr_mult和decay_mult两个参数,如下图:

                                              


如果你不想改变某一层的参数,只要将这一层对应的lr_mult和decay_mult都设置成0即可。

注意:这种方式的效果可能并不好,有的大牛建议,增大最后一个全连接层的lr_mult,如分别设置层10和20

第三个,最后一个全连接层的修改

修改的地方有两个:

一,我们的微调数据的种类和原始训练数据的种类可能不同,因此我们需要将层中的参数num_ouput:你的数据类型。

     二,当你修改了num_output参数后,由于与原始模型不同了,所以在加载模型时会报错,因此这一层的权重我们就不能从模型中加载,要重新训练。错误提示如下:



模型加载时是按照层的名字加载的,因此我们需要修改参数的名字,这样这一层的权重就可以从新初始值开始训练。

未完待续。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: