【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
在经过前面Caffe框架的搭建以及caffe基本框架的了解之后,接下来就要回到正题:使用caffe来进行模型的训练。
但如果对caffe并不是特别熟悉的话,从头开始训练一个模型会花费很多时间和精力,需要对整个caffe框架有一个很清楚的了解,难度比较高;同时,在使用数据迭代训练自己模型时会耗费很多计算资源。对于单GPU或者没有大的GPU计算能力的研究者会比较困难。所以,使用已经训练好的caffe模型来进行finetuning就会是一个比较好的选择。
一来,finetuning的过程和训练的过程步骤大体相同,因此在finetuning的过程中可以对caffe训练过程有一个详细的了解,通过一步步的训练和finetuning,在寻找最优参数过程中加深对caffe框架的理解,为自己后续自己从头开始训练一个caffe深度网络模型打好基础。
另外,finetuning需要的计算资源相对较少,使用的trikes相对较少,难度较低,比较适合caffe新手。在finetuning过程中熟悉caffe的各种接口和操作。
话不多少,进入正题:使用caffe进行finetuing
在finetuning之前,我们应该了解到caffe是一个深度学习框架,在建立好神经网络模型之后,使用大量的数据进行迭代调参数获取到一个深度学习模型,我们使用这样的模型来实现我们的任务,如:图像分类,目标检测等。
在caffe中,训练好的模型为*.caffemodel,在github上面下载的caffe源代码中并没有caffemodel,需要我们单独去下载,下载地址同样也在caffe在git的官网上(经典Alex模型下载点这里),在git上面还有其它已经训练好的模型文件,如GooLenet,Rcnn模型等等。
在下载好model文件之后,按照下面的步骤进行模型的finetuning。
1. 下载数据,转换数据( Convert data)
2. 定义网络结构(Define net (as prototxt) )
3. 设置网络训练过程中的各种参数(Define solver (as prototxt) )
4. 开始训练(Train (with pretrained weights))
1.下载数据按照要求准备好数据,这里主要讲一下如何将数据转换写入db文件中,方便网络训练过程中对数据的读写要求。
使用tools/convert_imageset.cpp将获取到的数据和标签写入db文件中。
需要注意的是,对于每一个训练样本,文件的格式应该是:
“[path/to/image.jpeg] [label]”
2.设计定义网络结构
● 如果是训练过程,那么需要重新写一个*.prototxt 文件,文件格式可以参考src/caffe/proto/caffe.proto下的定义。最简单的方法就是复制一个example中的proto文件根据自己的需要进行修改
● 如果需要对网络进行finetuning,那么复制一份该model文件对应的prototxt文件进行修改,因为finetuning的过程是让原有训练好的模型适应自己的数据,因此一般情况下,网络的模型并没有大的变化。需要做的事情有:
○ 修改文件中的数据层(因为是进行finetuning,因此数据输入层是自己的数据)
○ 修改输出层,因为一般情况下,finetuning的应用与原模型的应用不完全相同。
如:imagenet中的分类输出为1000类,所以在最终输出层时会是一个1000的向量,但是在实际应用中,类别可能只有10+种,因此不能直接使用imagenet中的输出层,需要对输出层进行修改;
○ 如果GPU比较小,计算能力比较差的话,需要减小batch_size参数,提高迭代效率;
○ **将blobs_lr参数设置为0**, 因为在finetuning过程中,网络的答题框架参数是不变的,我们只需要使用自己的数据对网络的小部分结构中参数进行更新和学习,因此需要将blob_lr参数设置为0,将网络的层参数进行冻结,不进行更新。
3.定义网络参数(proto文件)
在对caffe熟悉过程中,了解到在使用caffe进行网络训练时,需要在*.proto文件中设定网络训练所需参数信息。需要修改的地方有:
○ 将网络改成自己的网络
○ 修改snapshot的前缀snapshot_prefix(用于存储训练过程中的中间结果)
○ 减小基础学习率(base learning rate,divide by 100)
○ 修改参数max_iter 和 snapshot
【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning的更多相关文章
- Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
在经过前面Caffe框架的搭建以及caffe基本框架的了解之后,接下来就要回到正题:使用caffe来进行模型的训练. 但如果对caffe并不是特别熟悉的话,从头开始训练一个模型会花费很多时间和精力,需 ...
- 【神经网络与深度学习】Caffe使用step by step:caffe框架下的基本操作和分析
caffe虽然已经安装了快一个月了,但是caffe使用进展比较缓慢,果然如刘老师说的那样,搭建起来caffe框架环境比较简单,但是完整的从数据准备->模型训练->调参数->合理结果需 ...
- 【神经网络与深度学习】【CUDA开发】【VS开发】Caffe+VS2013+CUDA7.5+cuDNN配置过程说明
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置过程说明 标签:[Qt开发] 说明:这个工具在Windows上的配置真的是让我纠结万分,大部分 ...
- 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...
- 【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试
[神经网络与深度学习][CUDA开发]caffe-windows win32下的编译尝试 标签:[神经网络与深度学习] [CUDA开发] 主要是在开发Qt的应用程序时,需要的是有一个使用的库文件也只是 ...
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置成功后的第一次训练过程记录<二> 标签:[神经网络与深度学习] [CUDA开发] ...
- (转)神经网络和深度学习简史(第一部分):从感知机到BP算法
深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...
- [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈
觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...
- Deep Learning.ai学习笔记_第一门课_神经网络和深度学习
目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...
随机推荐
- sql 创建数据库并对数据库更改排序规则
use master -- 设置当前数据库为master,以便访问sysdatabases表 go if exists(select * from sysdatabases where name='t ...
- vue - router + iView 的使用(简单例子)
所使用的工具:谷歌浏览器.Nodejs(自带npm).HBuilder 0.要先安装Nodejs,下载安装即可 0-1.安装vue-cli,打开cmd 输入 npm install -g @vue/c ...
- 通俗易懂的例子解释 IAAS、SAAS、PAAS 的区别
你一定听说过云计算中的三个“高大上”的你一定听说过云计算中的三个“高大上”的概念:IaaS.PaaS和SaaS,这几个术语并不好理解.不过,如果你是个吃货,还喜欢披萨,这个问题就好解决了!好吧,其实你 ...
- sqlite3创建自增主键,以及清空表使自增列归零
1.创建自增主键 CREATE TABLE tb_python (ID INTEGER PRIMARY KEY AUTOINCREMENT,TITLE TEXT,URL TEXT); 2.清空表 SQ ...
- chromedriver.exe,自动化web, 安装谷歌驱动,以及可能遇到的坑
1.下载谷歌驱动:chromedriver.exe http://chromedriver.storage.googleapis.com/index.html (下载驱动的链接) 2.把下载的chro ...
- count(列) count(*)
总结:但是真的结论是这样的么.其实不然.其实在数据库中count(*)和count(列)根本就是不等价的,count(*)是针对于全表的,而count(列)是针对于某一列的,如果此列值为空的话,cou ...
- JS框架_(Laydate.js)简单实现日期日历
百度云盘 传送门 密码:71hf JavaScript日期与时间组件_____laydate.js 日期日历效果: <!DOCTYPE html> <html> <hea ...
- linux查看端口占用情况,python探测端口使用的小程序
Linux如何查看端口 1.lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000 # lsof -i:8000 COMMAND PID USER ...
- Golang Singleton
package example import ( "fmt" "sync") var m *singletonvar once sync.Once func G ...
- JS给XMLHttpRequest添加filter
function XMLHttpRequestFilter(){ let base = XMLHttpRequest.prototype.open; let filter_list = []; let ...