FineTuning机制的分析
FineTuning机制的分析
为什么用FineTuning
使用别人训练好的网络模型进行训练,前提是必须和别人用同一个网络,因为参数是根据网络而来的。当然最后一层是可以修改的,因为我们的数据可能并没有1000类,而只有几类。把最后一层的输出类别和层的名称改一下。用别人的参数、修改后的网络和自己的数据进行训练,使得参数适应自己的数据,这样一个过程,通常称之为微调(fine tuning). 也就是说,我们所拥有的数据很小,不足以训练一个网络,这是用别人训练过的参数以及网络训练我们自己的数据的过程就是微调(fine tuning)。
怎么FineTunning
Fine tuning 之所以有效的原因是,用到的网络是同一个网络,用到的参数是别人已经训练好的数据,所以在准确率上会有保证,这时候再稍微调整别人训练好的参数,往往会能达到我们想要的效果。
调整net文件
因为我们自己的数据集变化了,所以要修改net网络文件,大部分的内容都不变,变的只有data层、output层、batch的大小、前几层的学习率。data层需要改成我们自己的数据,output层的修改主要包括层的名字(使用不同的名字,预训练网络中该层的参数会重新初始化)和输出类别数目,并且要减小batch的大小,但是要和GPU的大小成比例。
对于学习率的调整是很重要的,如果有的层的参数不需要更新,可以把学习率设置为0.比如有4个全连接层,希望C层的参数不会改变,C前面的AB层的参数也不会改变,这种情况也就是D层的梯度不往前反向传播到D层的输入blob(也就是C层的输出blob 没有得到梯度),你可以通过设置D层的学习率为0,layer的梯度就不会反向传播了,前面的所有layer的参数也就不会改变了。对于有参数的更新的层,学习率可以减小10倍或100倍(最后一层除外),对于最后一层的学习率可以提高10倍,加快学习速率,因为该层需要重新学习。
调整solver文件
solver.prototxt文件中的参数一般只需要修改net训练网络的名称、学习率、最大迭代次数和snapshot。首先将net从预训练使用的net换为现在使用的net,然后降低学习率(一般降低10倍或者100倍),同时,将最大迭代次数和snapshot的数目相对减少。
Fine Tuning的原理
Fine tuning的原理就是利用已知的网络结构和已知的网络参数,修改output层为我们自己的层,微调最后一层前的所有层的参数,加大最后一层的学习率,因为最后一层我们需要重新学习,所以与其它层相比要有相对较大的学习率,这样就有效利用了深度神经网络强大的泛化能力,又免去了设计复杂的模型以及耗时良久的训练,所以fine tuning是当数据量不足时的一个比较合适的选择。
FineTuning机制的分析的更多相关文章
- Java虚拟机类加载机制——案例分析
转载: Java虚拟机类加载机制--案例分析 在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...
- Redis 发布/订阅机制原理分析
Redis 通过 PUBLISH. SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能. 这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播.实时 ...
- Android 中View的绘制机制源代码分析 三
到眼下为止,measure过程已经解说完了,今天開始我们就来学习layout过程.只是在学习layout过程之前.大家有没有发现我换了编辑器,哈哈.最终下定决心从Html编辑器切换为markdown编 ...
- Android AdapterView 源码分析以及其相关回收机制的分析
忽然,发现,网上的公开资料都是教你怎么继承一个baseadapter,然后重写那几个方法,再调用相关view的 setAdpater()方法, 接着,你的item 就显示在手机屏幕上了.很少有人关注a ...
- 10.hibernate缓存机制详细分析(转自xiaoluo501395377)
hibernate缓存机制详细分析 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论 ...
- Netfilter之连接跟踪实现机制初步分析
Netfilter之连接跟踪实现机制初步分析 原文: http://blog.chinaunix.net/uid-22227409-id-2656910.html 什么是连接跟踪 连接跟踪(CONNT ...
- 阿里系产品Xposed Hook检测机制原理分析
阿里系产品Xposed Hook检测机制原理分析 导语: 在逆向分析android App过程中,我们时常用的用的Java层hook框架就是Xposed Hook框架了.一些应用程序厂商为了保护自家a ...
- Android 中View的绘制机制源代码分析 一
尊重原创: http://blog.csdn.net/yuanzeyao/article/details/46765113 差点儿相同半年没有写博客了,一是由于工作比較忙,二是认为没有什么内容值得写, ...
- Android 中View的绘制机制源代码分析 二
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/46842891 本篇文章接着上篇文章的内容来继续讨论View的绘制机制,上篇文章中我们主要解说 ...
随机推荐
- WindowsForms使用Telerik Reporting
新建一个WindowsForms窗体项目 然后拖动ReportViewer这个控件到WindowsForms的窗体中 如上图所示,用来呈现报表的控件,这个控件可以打印报表,转换报表这类的功能 接下来我 ...
- AF封装的关于一次请求上传多图到服务器!!!
方式一:图片封装在模型数组中 /** * 上传多图到服务器 * * @param URLString 请求地址 * @param parameters 请求的其他参数 * ...
- 远程连接mysql出现1130的错误
数据库权限不足 连接数据以后执行以下命令 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '您的数据库密码' WITH GRANT OP ...
- PAT Advanced 1031 Hello World for U (20 分)
Given any string of N (≥) characters, you are asked to form the characters into the shape of U. For ...
- 瞎JB逆
P为质 ; long long quickpow(long long a, long long b) { ) ; ; a %= mod; while(b) { ) ret = (ret * a) % ...
- 10年前文章_使用opkg 管理软件更新
为避免调试过程中每次都要刷写flash, 可以使用opkg 管理工具来实现单个包更新 一.首先配置http 服务器,使之能访问生成的ipkg 格式的包,例如你的工作目录在/home/xxx/build ...
- git分支管理和工作流规范:不同场景细化和演示
https://www.iteye.com/blog/qqtalk-2415889 前两篇介绍了 git基本概念 和 具体的规范,本篇针对不同的使用场景做演示. 分支 分支命名 master 分支名称 ...
- php内置函数分析之array_chunk()
PHP_FUNCTION(array_chunk) { int argc = ZEND_NUM_ARGS(), num_in; zend_long size, current = ; zend_str ...
- Django【第22篇】:基于Ajax实现的登录
基于ajax实现的登录 一.需要知道的新知识点 1.刷新验证码.给src属性加一个?号.加个?会重新去请求 //#给验证码刷新 $(".vialdCode_img").click( ...
- 微信小程序-坑1-await-async
VM45:1 thirdScriptError sdk uncaught third Error regeneratorRuntime is not defined ReferenceError: r ...