Caffe的模型及网络结构

因本人工作是对算法SDK的开发与维护,之前主要关注深度学习算法的推理部分的实现。从今天开始,进行训练部分的学习和实践,会持续发表和更新深度学习训练相关的博客,请大家批评指正。

就从训练model 的网络文件开始吧。

因为参数很多,肯定是没有列全的,就列了当前常用的参数,以后慢慢更新了。

  1. Caffe的模型及网络结构

查看工具

http://ethereon.github.io/netscope/#/editor

    1. Solver 文件的编写

solver算是caffe的核心的核心,它协调着整个模型的运作。caffe程序运行必带的一个参数就是solver配置文件。运行代码一般为

# caffe train --solver=*_slover.prototxt

solver的主要作用就是交替调用前向(forward)算法和后向(backward)算法来更新参数,从而最小化loss,实际上就是一种迭代的优化算法。

字段

解释

 

 

base_lr

Base learning rate

display

the number of iterations done to process one display

max_iter

The maximum number of iterations

momentum

momentum是梯度下降法中一种常用的加速技术。对于一般的SGD,其表达式为,沿负梯度方向下降。而带momentum项的SGD则写生如下形式:

其中β即momentum系数,通俗的理解上面式子就是,如果上一次的momentum(即v)与这一次的负梯度方向是相同的,那这次下降的幅度就会加大,所以这样做能够达到加速收敛的过程。

lr_policy&&gamma &&power

学习速率的策略可以设置为下面这些值,相应的学习率的计算为:

  • fixed:   保持base_lr不变.
  •  step:    如果设置为step,则还需要设置一个stepsize,  返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数
  • exp:     返回base_lr * gamma ^ iter, iter为当前迭代次数
  •  inv:      如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)
  • multistep: 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据                                 stepvalue值变化
  • poly:     学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)
  •  sigmoid: 学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

net

当前train/test网络协议buffer的定义,即*.prototxt

Snapshot && snapshot_prefix

Snapshot 用于设置训练多少次后进行保存,默认为0,不保存。

snapshot_prefix设置保存的路径

solver_mode

设置运行模式,CPU或GPU

test_iter

Number of Test batch size and test iterations.

test_interval

The number of train iterations done , when carrying out one testing.

 

 

weight_decay

weight Decay是一个L2 penalty,是对参数取值平方和的惩罚。

 

 

 

    1. Prototxt文件的编写
  1. Prototxt包含的元素:

元素

解释

name

该net的名称

layer

层的规范

 

  1. Layer包含的元素:

元素

解释

name

层的名称,例如,input data层名称为“data”

type

层的类型,例如,input data层的类型为“Data”,卷积层的类型“Convolution”

top

是指该层的输出的blob的名称,通过它可以唯一确定一个blob。例如,在训练中,input data层的有两个top分别为“data”和“label”,分别存放了数据和标签。

bottom

是指该层的输入的blob的名称,input data层是顶层,因此没有bottom blob。该层的输入的bottom一定是它的上一层的top。如果该层的bottom和top相同,则该层的输入和输出占用了一个blob。

include

内部一般包含当前网络的运行阶段的设定。

data_param

定义数据参数,数据来源等等

transform_param

对input数据进行预处理的参数。

param

定义weight或bias的学习速率和衰减因子参数。

convolution_param

定义卷积层的参数。

lrn_param

定义归一化层的参数

pooling_param

定义pooling层的参数

inner_product_param

定义全连接层的参数

dropout_param

定义Dropout层的参数

accuracy_param

定义Accuracy层的参数

 

  1. Include参数包含的元素:

元素

解释

phase

当前层的阶段;TRAIN:训练;TEST:测试;

 

  1. Param参数包含的元素:

元素

解释

lr_mult

weight或bias的学习速率

decay_mult

weight或bias的衰减因子

 

  1. convolution_param参数包含的元素:

元素

解释

num_output

输出的个数;标识当前convolution层的核的个数;

pad

填充边缘的大小。如设置,可是得到的特征图与原图大小相等,可使用pad_h和pad_w来分别设定

kernel_size

kernel的大小,如果卷积核的长和宽不等,需要用kernel_h和kernel_w分别设定

group

分组,默认为1组。如果大于1,我们限制卷积的连接操作在一个子集内。

卷积分组可以减少网络的参数。

 每个input是需要和每一个kernel都进行连接的,但是由于分组的原因其只是与部分的kernel进行连接的。如: 我们根据图像的通道来分组,那么第i个输出分组只能与第i个输入分组进行连接。

weight_filler

权值初始化,若设置为constant, 则默认为0。也可使用"xavier"或者”gaussian"进行初始化

bias_filler

偏置项的初始化,与weight_filter

 

 

 

  1. lrn_param参数包含如下元素:

元素

解释

local_size

对于cross channel LRN为需要求和的邻近channel的数量;对于within channel LRN为需要求和的空间区域的边长

alpha

scaling参数;默认为1;

beta

指数;默认为5

norm_region

 [default ACROSS_CHANNELS]: 选择哪种LRN的方法ACROSS_CHANNELS 或者WITHIN_CHANNEL

 

  1. pooling_param参数包含的元素有:

元素

解释

kernel_size

必选;(or kernel_h and kernel_w):过滤器的大小

pool

可选;pooling的方法,MAX, AVE, 和STOCHASTIC;默认MAX

stride

可选(or stride_h and stride_w) [default1]:指定过滤器的步长

 

 

 

  1. inner_product_param参数包含的元素如下:

元素

解释

num_output

过滤器个数。必选;

weight_filler

 [default type: 'constant' value: 0]:参数的初始化方法

bias_filler

偏置的初始化方法

 

 

 

  1. weight_filler和bias_filler包含如下元素:

元素

解释

type

初始化类型;有“constant”“gaussian”“uniform”“Xavier”等等。常用的是“constant”和“gaussian”

std

标准差;如果是gaussian,则可选的设置它;默认值为1;

mean

均值;如果是gaussian,则可选的设置它;默认值为0;

value

定值;如果是“constant”,则设置它;默认值为0;

 

  1. accuracy_param包含如下元素:

元素

解释

top_k

Accuracy层的最大范围; Sets the maximum rank k  at which a prediction is considered correct. For example, if  k = 5 , a prediction is counted correct if the correct label is among the top 5 predicted labels.

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值