Caffe中的基本概念

本文深入解析Caffe深度学习框架的四大核心组件:Blob、Layer、Net和Solver,详细介绍caffemodel的用途,以及配置文件的设置。涵盖训练网络、测试网络及部署网络的配置差异,适合深度学习开发者和研究者参考。
摘要由CSDN通过智能技术生成

一 Caffe模块包括四个部分

  1. Blob:Caffe中数据的封装,用于layer上流动:

           Blob四维连续数组,通常表示为(n,k,w,h),是基础的数据结构。可表示输入输出数据,也可表示参数数据     

     2. Layer:输入层,输出层,神经网络层的抽象

           Layer网络基本单元,每一层定义了三种运算:初始化网络参数,前向传播,后向传播

     3.Net:神经网络结构,将Layer层叠关联起来

           Net为无回路有向图

           初始化函数:创建blobs和layers;调用layers的setup函数来初始化layers

           forward和backward

     4.Solver:定义神经网络训练和测试参数

           创建训练网络和测试网络

           周期性的测试网络

           调用前向和反向函数进行的迭代优化和参数更新

           solver每轮迭代都会通过前向函数计算输出和损失(loss),还用反向传播来计算梯度

二 caffe model

  1. 用于保存和恢复网络参数,后缀为.caffemodel
  2. solver保存和恢复运行状态,后缀为.solverstate

三 caffe环境配置

四 caffe源码解读

1.文件夹结构说明

   data:用于存放下载的训练数据

   docs:帮助文档

   examples:一些代码样例

   matlab:matlab接口文件

   python:python接口文件

   model:一些配置好的模型参数

   scripts:一些文档和数据用到的脚本

2.核心代码文件夹:

   tools:保存的源码是用于生成二进制处理程序的,也是我们直接使用命令行训练时候的工具

   include:caffe的头文件.hpp,命名方式一般为网络名字开头

   src:caffe的源文件:.cpp,.cu。其中.cpp文件对应到了cpu版本的代码,.cu文件对应到了gpu版本的代码

3.src/caffe核心源码结构

   test:用gtest测试caffe的源码

   util:数据转换时用的一些代码

   proto:是一种数据存储格式,帮助caffe提速,注意,我们在添加网络的时候,需要在这个文件中添加相应的配置,除此之外,                 还需要添加相应的.hpp和.cpp文件到include和src中

   layers:定义并实现了网络的前向,反向等方法

   solvers:定义并实现了一系列优化方法,如SGD,Adam等

五 caffe配置文件介绍

   solver.prototxt:配置模型训练的超参数:

  1. net := 指定待训练模型结构文件,若没有明确指定训练和测试网络,即train_val.prototxt
  2. test_interval := 测试间隔
  3. test_iteration := 测试时进行的迭代次数,等于测试集容量/测试网络的batch size
  4. base_lr := 基本学习率
  5. lr_policy := 学习率变更策略
  6. gamma := 学习率变更策略需要用到的参数
  7. power :=  学习率变更策略需要用到的参数
  8. stepsize := 学习率变更策略Step的变更步长(固定步长)
  9. stepvalue := 学习率变更策略Multistep的变更步长(可变步长)
  10. max_iter := 模型训练的最大迭代次数
  11. momentum := 动量,是优化策略(Adam,SGD,...)用到的参数,如果我们不采用相应的优化策略,这个参数就不用配置
  12. momentum2 := 优化策略Adam用到的参数
  13. weight_decay := 权重衰减率
  14. display := 每隔几次迭代显示一次结果
  15. snapshot := 快照,每隔几次保存一次模型参数
  16. snapshot_prefix := 保存模型文件的前缀,可以是路径
  17. type := solver优化策略,即SGD,Adam等
  18. solve_mode := 指定训练模式,即CPU/GPU
  19. device_id := 指定设备号(使用GPU模式),默认为0

   train_val.prototxt:训练网络

       训练时通常将训练网络,测试网络定义为train_val.prototxt或分开定义为train.prototxt和test.prototxt

       例如

name:"Lenet"
layer{
  name:"mnist"
  type:"Data"
  top:"data"
  top:"label"
  include{
   phase:TRAIN
  }
  transform_param{
    scale:0.00390625
  }
  data_param{
    source:"examples/mnist/mnist_train_lmdb"
    batch size:64
    backend:LMDB
  }

   deploy.prorotxt:测试网络

       在网络训练完成时,往往通过deploy.prorotxt文件进行网络测试

        deploy.prorotxt和train_val.prototxt的主要区别在于:

            1. deploy.prorotxt没有反向传播部分,因而没有loss层

            2. deploy.prorotxt会去掉数据层,只需告诉输入的数据维度

            3.deploy.prorotxt中将BN层的use_global_stats设置为true

deploy.prorotxt有以下两种定义方式:

第一种:

layer{
name:"data"
type:"input"
top:"data"
input_param{shape:{dim:10 dim:3 dim:32 dim:32}}

第二种:

input:"data"
input_shape{
  dim:1# batchsize
  dim:1# number of colour channels -rgb
  dim:28# width
  dim:29# height}

六 深度学习标准层在caffe中定义

 数据输入层:Data,ImageData,MemoryData等

 视觉层:包括Convolution,Pooling,BN,LRN,im2col等

 激活层:relu,sigmoid等

 损失层:softmax_loss,Euclidean等

 循环层:RNN, LSTM等

 工具层:reshape,concat,flatten,slice等

layer{
   name:"xx" #层名
   type:"xx" #类型
   top:"xx" #输出
   bottom:"xx" #输入
   some_param {#其他参数定义等...}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值