caffe微调网络时的注意事项(持续更新中)
2016-05-04 11:04
281 查看
最近在微调遇到了一些困难,在此做一个记录,与大家分享!
第一个,微调数据的准备
微调的目的是使别人训练好的模型更适合自己的数据,因此,微调的数据一般都是适合自己应用的数据。但是,大牛建议,在微调是不要全部使用自己的数据,应该将自己的数据和原始训练数据混合在一起,并逐步增加自己的数据的比例,这样效果可能会好一些。
第二个,网络的修改
微调是在已经训练好的模型的基础上,用自己的数据继续训练网络。那为什么叫微调为网络而不是继续训练网络。个人觉得微调指的是可以局部调整参数,也就是我们可以在微调是可以只调节某一层的权重,一般只调节全连接层的权重。那么要怎样实现这个目的呢?这就需要我们修改网络配置文件中的lr_mult和decay_mult两个参数,如下图:
如果你不想改变某一层的参数,只要将这一层对应的lr_mult和decay_mult都设置成0即可。
注意:这种方式的效果可能并不好,有的大牛建议,增大最后一个全连接层的lr_mult,如分别设置层10和20
第三个,最后一个全连接层的修改
修改的地方有两个:
一,我们的微调数据的种类和原始训练数据的种类可能不同,因此我们需要将层中的参数num_ouput:你的数据类型。
二,当你修改了num_output参数后,由于与原始模型不同了,所以在加载模型时会报错,因此这一层的权重我们就不能从模型中加载,要重新训练。错误提示如下:
模型加载时是按照层的名字加载的,因此我们需要修改参数的名字,这样这一层的权重就可以从新初始值开始训练。
未完待续。。。。。
第一个,微调数据的准备
微调的目的是使别人训练好的模型更适合自己的数据,因此,微调的数据一般都是适合自己应用的数据。但是,大牛建议,在微调是不要全部使用自己的数据,应该将自己的数据和原始训练数据混合在一起,并逐步增加自己的数据的比例,这样效果可能会好一些。
第二个,网络的修改
微调是在已经训练好的模型的基础上,用自己的数据继续训练网络。那为什么叫微调为网络而不是继续训练网络。个人觉得微调指的是可以局部调整参数,也就是我们可以在微调是可以只调节某一层的权重,一般只调节全连接层的权重。那么要怎样实现这个目的呢?这就需要我们修改网络配置文件中的lr_mult和decay_mult两个参数,如下图:
如果你不想改变某一层的参数,只要将这一层对应的lr_mult和decay_mult都设置成0即可。
注意:这种方式的效果可能并不好,有的大牛建议,增大最后一个全连接层的lr_mult,如分别设置层10和20
第三个,最后一个全连接层的修改
修改的地方有两个:
一,我们的微调数据的种类和原始训练数据的种类可能不同,因此我们需要将层中的参数num_ouput:你的数据类型。
二,当你修改了num_output参数后,由于与原始模型不同了,所以在加载模型时会报错,因此这一层的权重我们就不能从模型中加载,要重新训练。错误提示如下:
模型加载时是按照层的名字加载的,因此我们需要修改参数的名字,这样这一层的权重就可以从新初始值开始训练。
未完待续。。。。。
相关文章推荐
- vmware 虚拟网络环境配置
- charles抓取https请求包
- charles抓取https请求包
- charles抓取https请求包
- Android-Volley-加载网络图片
- HttpURLConnection数据请求
- App启动时候使用BroadcastReceiver监听网络情况,不能保证所有设备能监听到
- HTTPClient模块的HttpGet和HttpPost
- 《Nodejs开发加密货币》之八:一个精巧的p2p网络实现
- iOS网络HTTP、TCP、UDP、Socket 知识总结
- httpclient4.3.X post请求上传,将文件封装到请求体中(不以form表单形式)
- Retrofit2 完全解析 探索与okhttp之间的关系
- C++ 简单实现HTTP GET/POST 请求
- HttpURLConnection用法详解
- HttpWatch使用步骤
- 详解网络摄像机中的IR-CUT
- socket tcp/ip
- 已拦截跨源请求:同源策略禁止读取位于 http://localhost:8080/*的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。
- 检测当前网络是否可用
- 打开设置网络界面