caffe上手:修改已训练好的网络并训练模型
前面做好了lmdb和均值文件,下面以Googlenet为例修改网络并训练模型。
我们将caffe-master\models下的bvlc_googlenet文件夹复制到caffe-master\examples\imagenet下。(因为我们的lmdb和均值都在这里,放一起方便些)
打开train_val.txt,修改:
1.修改data层:
- layer {
- name: "data"
- type: "Data"
- top: "data"
- top: "label"
- include {
- phase: TRAIN
- }
- transform_param {
- mirror: true
- crop_size: 224
- mean_file: "examples/imagenet/mydata_mean.binaryproto" #均值文件
- #mean_value: 104 #这些注释掉
- #mean_value: 117
- #mean_value: 123
- }
- data_param {
- source: "examples/imagenet/mydata_train_lmdb" #训练集的lmdb
- batch_size: 32 #根据GPU修改
- backend: LMDB
- }
- }
- layer {
- name: "data"
- type: "Data"
- top: "data"
- top: "label"
- include {
- phase: TEST
- }
- transform_param {
- mirror: false
- crop_size: 224
- mean_file: "examples/imagenet/mydata_mean.binaryproto" #均值文件
- #mean_value: 104
- #mean_value: 117
- #mean_value: 123
- }
- data_param {
- source: "examples/imagenet/mydata_val_lmdb" #验证集lmdb
- batch_size: 50 #和solver中的test_iter相乘约等于验证集大小
- backend: LMDB
- }
- }
2.修改输出:
由于Googlenet有三个输出,所以改三个地方,其他网络一般只有一个输出,则改一个地方即可。
如果是微调,那么输出层的层名也要修改。(参数根据层名来初始化,由于输出改了,该层参数就不对应了,因此要改名)
- layer {
- name: "loss1/classifier"
- type: "InnerProduct"
- bottom: "loss1/fc"
- top: "loss1/classifier"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- inner_product_param {
- num_output: 1000 #改成你的数据集类别数
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- }
- layer {
- name: "loss2/classifier"
- type: "InnerProduct"
- bottom: "loss2/fc"
- top: "loss2/classifier"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- inner_product_param {
- num_output: 1000 #改成你的数据集类别数
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- }
- layer {
- name: "loss3/classifier"
- type: "InnerProduct"
- bottom: "pool5/7x7_s1"
- top: "loss3/classifier"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- inner_product_param {
- num_output: 1000 #改成你的数据集类别数
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- }
3.打开deploy.prototxt,修改:
- layer {
- name: "loss3/classifier"
- type: "InnerProduct"
- bottom: "pool5/7x7_s1"
- top: "loss3/classifier"
- param {
- lr_mult: 1
- decay_mult: 1
- }
- param {
- lr_mult: 2
- decay_mult: 0
- }
- inner_product_param {
- num_output: 1000 #改成你的数据集类别数
- weight_filler {
- type: "xavier"
- }
- bias_filler {
- type: "constant"
- value: 0
- }
- }
- }
如果是微调,该层层名和train_val.prototxt修改一致。
接着,打开solver,修改:
- net: "examples/imagenet/bvlc_googlenet/train_val.prototxt" #路径不要错
- test_iter: 1000 #前面已说明该值
- test_interval: 4000 #迭代多少次测试一次
- test_initialization: false
- display: 40
- average_loss: 40
- base_lr: 0.01
- lr_policy: "step"
- stepsize: 320000 #迭代多少次改变一次学习率
- gamma: 0.96
- max_iter: 10000000 #迭代次数
- momentum: 0.9
- weight_decay: 0.0002
- snapshot: 40000
- snapshot_prefix: "examples/imagenet/bvlc_googlenet" #生成的caffemodel保存在imagenet下,形如bvlc_googlenet_iter_***.caffemodel
- solver_mode: GPU
这时,我们回到caffe-master\examples\imagenet下,打开train_caffenet.sh,修改:
(如果是微调,在脚本里加入-weights **/**/**.caffemodel即可,即用来微调的caffemodel路径)
- #!/usr/bin/env sh
- ./build/tools/caffe train \
- -solver examples/imagenet/bvlc_googlenet/solver.prototxt -gpu 0
(如果有多个GPU,可自行选择)
然后,在caffe-master下执行改脚本即可开始训练:$caffe-master ./examples/imagenet/train_caffenet.sh
训练得到的caffemodel就可以用来做图像分类了,此时,需要(1)得到的labels.txt,(2)得到的mydata_mean.binaryproto,(3)得到的caffemodel以及已经修改过的deploy.prototxt,共四个文件,具体过程看:http://blog.csdn.net/sinat_30071459/article/details/50974695
caffe上手:修改已训练好的网络并训练模型相关推荐
- Caffe实践】如何利用Caffe训练ImageNet分类网络
Caffe实践]如何利用Caffe训练ImageNet分类网络 源文章:https://github.com/BVLC/caffe/tree/master/examples/imagenet 由于要使 ...
- python caffe 训练自己的模型_python接口调用已训练好的caffe模型测试分类方法
训练好了model后,可以通过python调用caffe的模型,然后进行模型测试的输出. 本次测试主要依靠的模型是在caffe模型里面自带训练好的结构参数:~/caffe/models/bvlc_re ...
- Caffe技巧之使用snapshot来继续网络训练
Caffe技巧之使用snapshot来继续网络训练 Caffe技巧之使用snapshot来继续网络训练 Step 1设置solverprototxt Step 2设置运行脚本sh 有时候想在已经训练好 ...
- 利用caffe的solverstate断点训练
你可以从系统 /tmp 文件夹获取,名字是什么 caffe.ubuntu.username.log.INFO.....之类 ====================================== ...
- 使用caffe对mnist进行训练遇到的点点滴滴
1. 前言 caffe 是一个非常好用的处理深度学习的基本框架,使用C++编写,因而速度非常快,同时提供了python 和 matlab接口,使用起来非常方便,但是由于caffe的文档资源相对比较少, ...
- Caffe的深度学习训练全过程
转载自:http://www.infoq.com/cn/articles/whole-process-of-caffe-depth-learning-training 今天的目标是使用Caffe完成深 ...
- caffe 的命令行训练与测试
本文转自: http://blog.csdn.net/yiliang_/article/details/60464968 Train训练(用cmd caffe命令行) (solver.prototxt ...
- [caffe] 数据制作和训练
[caffe] 数据制作和训练 在使用caffe时,我们希望使用自己的数据进行训练,以下给出如何制作自己的数据.所有的数据制作都是基于imagenet的. 1.数据准备,我们需要一个train和val ...
- FSRNet:端到端深度可训练人脸超分辨网络
作者丨左育莘 学校丨西安电子科技大学 研究方向丨计算机视觉 这篇文章 FSRNet: End-to-End Learning Face Super-Resolution with Facial Pri ...
- NLP-分类模型-2016-文本分类:FastText【使用CBOW的模型结构;作用:①文本分类、②训练词向量、③词向量模型迁移(直接拿FastText官方已训练好的词向量来使用)】【基于子词训练】
<原始论文:Bag of Tricks for Efficient Text Classification> <原始论文:Enriching Word Vectors with Su ...
最新文章
- 利用stdin stdout stderr及POSIX-linux机制重定向写日志
- 团队需要Scrum Master做这六件事-Scrum中文网
- matlab索引程序,Matlab索引到逻辑索引
- 从传统运维到云运维演进历程之软件定义存储(五)下
- keras从入门到放弃(十)手写数字识别训练
- armeabi-v7a/arm64-v8a/x86/x86_64均兼容armeabi
- Nginx开发一个简单的HTTP过滤模块
- 赵雅智_Fragment生命周期
- java EE 监听器
- 9.20–9.24 三亚
- bigdicmal除法精度设置_java中BigDecimal进行加减乘除的基本用法
- php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析
- linux下apache+php配置
- UIView动画设置
- 已测试:网上大神写的快手极速版脚本,autojs版快手极速版自动脚本下载
- 每天学点统计学——指数
- 稻城智慧旅游太极计算机,智慧旅游,让梦中的“香格里拉”离我们更近
- opencv python 对指针仪表读数识别
- 树莓派4B官方说明文档
- 管理软件到底有没有前途(三)-从国家十一五信息化战略规划来看