前面做好了lmdb和均值文件,下面以Googlenet为例修改网络并训练模型。

我们将caffe-master\models下的bvlc_googlenet文件夹复制到caffe-master\examples\imagenet下。(因为我们的lmdb和均值都在这里,放一起方便些)

打开train_val.txt,修改:

1.修改data层:

[plain] view plaincopy
  1. layer {
  2. name: "data"
  3. type: "Data"
  4. top: "data"
  5. top: "label"
  6. include {
  7. phase: TRAIN
  8. }
  9. transform_param {
  10. mirror: true
  11. crop_size: 224
  12. mean_file: "examples/imagenet/mydata_mean.binaryproto" #均值文件
  13. #mean_value: 104 #这些注释掉
  14. #mean_value: 117
  15. #mean_value: 123
  16. }
  17. data_param {
  18. source: "examples/imagenet/mydata_train_lmdb" #训练集的lmdb
  19. batch_size: 32 #根据GPU修改
  20. backend: LMDB
  21. }
  22. }
[plain] view plaincopy
  1. layer {
  2. name: "data"
  3. type: "Data"
  4. top: "data"
  5. top: "label"
  6. include {
  7. phase: TEST
  8. }
  9. transform_param {
  10. mirror: false
  11. crop_size: 224
  12. mean_file: "examples/imagenet/mydata_mean.binaryproto" #均值文件
  13. #mean_value: 104
  14. #mean_value: 117
  15. #mean_value: 123
  16. }
  17. data_param {
  18. source: "examples/imagenet/mydata_val_lmdb" #验证集lmdb
  19. batch_size: 50 #和solver中的test_iter相乘约等于验证集大小
  20. backend: LMDB
  21. }
  22. }

2.修改输出:

由于Googlenet有三个输出,所以改三个地方,其他网络一般只有一个输出,则改一个地方即可。

如果是微调,那么输出层的层名也要修改。(参数根据层名来初始化,由于输出改了,该层参数就不对应了,因此要改名)

[plain] view plaincopy
  1. layer {
  2. name: "loss1/classifier"
  3. type: "InnerProduct"
  4. bottom: "loss1/fc"
  5. top: "loss1/classifier"
  6. param {
  7. lr_mult: 1
  8. decay_mult: 1
  9. }
  10. param {
  11. lr_mult: 2
  12. decay_mult: 0
  13. }
  14. inner_product_param {
  15. num_output: 1000 #改成你的数据集类别数
  16. weight_filler {
  17. type: "xavier"
  18. }
  19. bias_filler {
  20. type: "constant"
  21. value: 0
  22. }
  23. }
  24. }
[plain] view plaincopy
  1. layer {
  2. name: "loss2/classifier"
  3. type: "InnerProduct"
  4. bottom: "loss2/fc"
  5. top: "loss2/classifier"
  6. param {
  7. lr_mult: 1
  8. decay_mult: 1
  9. }
  10. param {
  11. lr_mult: 2
  12. decay_mult: 0
  13. }
  14. inner_product_param {
  15. num_output: 1000 #改成你的数据集类别数
  16. weight_filler {
  17. type: "xavier"
  18. }
  19. bias_filler {
  20. type: "constant"
  21. value: 0
  22. }
  23. }
  24. }
[plain] view plaincopy
  1. layer {
  2. name: "loss3/classifier"
  3. type: "InnerProduct"
  4. bottom: "pool5/7x7_s1"
  5. top: "loss3/classifier"
  6. param {
  7. lr_mult: 1
  8. decay_mult: 1
  9. }
  10. param {
  11. lr_mult: 2
  12. decay_mult: 0
  13. }
  14. inner_product_param {
  15. num_output: 1000 #改成你的数据集类别数
  16. weight_filler {
  17. type: "xavier"
  18. }
  19. bias_filler {
  20. type: "constant"
  21. value: 0
  22. }
  23. }
  24. }

3.打开deploy.prototxt,修改:

[plain] view plaincopy
  1. layer {
  2. name: "loss3/classifier"
  3. type: "InnerProduct"
  4. bottom: "pool5/7x7_s1"
  5. top: "loss3/classifier"
  6. param {
  7. lr_mult: 1
  8. decay_mult: 1
  9. }
  10. param {
  11. lr_mult: 2
  12. decay_mult: 0
  13. }
  14. inner_product_param {
  15. num_output: 1000 #改成你的数据集类别数
  16. weight_filler {
  17. type: "xavier"
  18. }
  19. bias_filler {
  20. type: "constant"
  21. value: 0
  22. }
  23. }
  24. }

如果是微调,该层层名和train_val.prototxt修改一致。

接着,打开solver,修改:

[plain] view plaincopy
  1. net: "examples/imagenet/bvlc_googlenet/train_val.prototxt" #路径不要错
  2. test_iter: 1000 #前面已说明该值
  3. test_interval: 4000 #迭代多少次测试一次
  4. test_initialization: false
  5. display: 40
  6. average_loss: 40
  7. base_lr: 0.01
  8. lr_policy: "step"
  9. stepsize: 320000 #迭代多少次改变一次学习率
  10. gamma: 0.96
  11. max_iter: 10000000 #迭代次数
  12. momentum: 0.9
  13. weight_decay: 0.0002
  14. snapshot: 40000
  15. snapshot_prefix: "examples/imagenet/bvlc_googlenet" #生成的caffemodel保存在imagenet下,形如bvlc_googlenet_iter_***.caffemodel
  16. solver_mode: GPU

这时,我们回到caffe-master\examples\imagenet下,打开train_caffenet.sh,修改:

(如果是微调,在脚本里加入-weights **/**/**.caffemodel即可,即用来微调的caffemodel路径)

[plain] view plaincopy
  1. #!/usr/bin/env sh
  2. ./build/tools/caffe train \
  3. -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上手:修改已训练好的网络并训练模型相关推荐

  1. Caffe实践】如何利用Caffe训练ImageNet分类网络

    Caffe实践]如何利用Caffe训练ImageNet分类网络 源文章:https://github.com/BVLC/caffe/tree/master/examples/imagenet 由于要使 ...

  2. python caffe 训练自己的模型_python接口调用已训练好的caffe模型测试分类方法

    训练好了model后,可以通过python调用caffe的模型,然后进行模型测试的输出. 本次测试主要依靠的模型是在caffe模型里面自带训练好的结构参数:~/caffe/models/bvlc_re ...

  3. Caffe技巧之使用snapshot来继续网络训练

    Caffe技巧之使用snapshot来继续网络训练 Caffe技巧之使用snapshot来继续网络训练 Step 1设置solverprototxt Step 2设置运行脚本sh 有时候想在已经训练好 ...

  4. 利用caffe的solverstate断点训练

    你可以从系统 /tmp 文件夹获取,名字是什么 caffe.ubuntu.username.log.INFO.....之类 ====================================== ...

  5. 使用caffe对mnist进行训练遇到的点点滴滴

    1. 前言 caffe 是一个非常好用的处理深度学习的基本框架,使用C++编写,因而速度非常快,同时提供了python 和 matlab接口,使用起来非常方便,但是由于caffe的文档资源相对比较少, ...

  6. Caffe的深度学习训练全过程

    转载自:http://www.infoq.com/cn/articles/whole-process-of-caffe-depth-learning-training 今天的目标是使用Caffe完成深 ...

  7. caffe 的命令行训练与测试

    本文转自: http://blog.csdn.net/yiliang_/article/details/60464968 Train训练(用cmd caffe命令行) (solver.prototxt ...

  8. [caffe] 数据制作和训练

    [caffe] 数据制作和训练 在使用caffe时,我们希望使用自己的数据进行训练,以下给出如何制作自己的数据.所有的数据制作都是基于imagenet的. 1.数据准备,我们需要一个train和val ...

  9. FSRNet:端到端深度可训练人脸超分辨网络

    作者丨左育莘 学校丨西安电子科技大学 研究方向丨计算机视觉 这篇文章 FSRNet: End-to-End Learning Face Super-Resolution with Facial Pri ...

  10. NLP-分类模型-2016-文本分类:FastText【使用CBOW的模型结构;作用:①文本分类、②训练词向量、③词向量模型迁移(直接拿FastText官方已训练好的词向量来使用)】【基于子词训练】

    <原始论文:Bag of Tricks for Efficient Text Classification> <原始论文:Enriching Word Vectors with Su ...

最新文章

  1. 利用stdin stdout stderr及POSIX-linux机制重定向写日志
  2. 团队需要Scrum Master做这六件事-Scrum中文网
  3. matlab索引程序,Matlab索引到逻辑索引
  4. 从传统运维到云运维演进历程之软件定义存储(五)下
  5. keras从入门到放弃(十)手写数字识别训练
  6. armeabi-v7a/arm64-v8a/x86/x86_64均兼容armeabi
  7. Nginx开发一个简单的HTTP过滤模块
  8. 赵雅智_Fragment生命周期
  9. java EE 监听器
  10. 9.20–9.24 三亚
  11. bigdicmal除法精度设置_java中BigDecimal进行加减乘除的基本用法
  12. php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析
  13. linux下apache+php配置
  14. UIView动画设置
  15. 已测试:网上大神写的快手极速版脚本,autojs版快手极速版自动脚本下载
  16. 每天学点统计学——指数
  17. 稻城智慧旅游太极计算机,智慧旅游,让梦中的“香格里拉”离我们更近
  18. opencv python 对指针仪表读数识别
  19. 树莓派4B官方说明文档
  20. 管理软件到底有没有前途(三)-从国家十一五信息化战略规划来看

热门文章

  1. MySQL数据表类型及文件结构
  2. Android - 找到当前类的Context
  3. 前后端分离的思考与实践(一)
  4. 〖Linux〗在tmux同时使用bash和zsh
  5. How to update a module
  6. 阿里旺旺新老版本共存
  7. Network 第三篇 - STP生成树协议
  8. charles Mock测试总结
  9. Git linux下保存密码方法
  10. 转帖:一份不错的游戏程序书单(比较全面,但都是英文的。。)