因本人工作是对算法SDK的开发与维护,之前主要关注深度学习算法的推理部分的实现。从今天开始,进行训练部分的学习和实践,会持续发表和更新深度学习训练相关的博客,请大家批评指正。
就从训练model 的网络文件开始吧。
因为参数很多,肯定是没有列全的,就列了当前常用的参数,以后慢慢更新了。
- Caffe的模型及网络结构
查看工具
http://ethereon.github.io/netscope/#/editor
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 | 学习速率的策略可以设置为下面这些值,相应的学习率的计算为:
|
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,是对参数取值平方和的惩罚。 |
|
|
元素 | 解释 |
name | 该net的名称 |
layer | 层的规范 |
- 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层的参数 |
- Include参数包含的元素:
元素 | 解释 |
phase | 当前层的阶段;TRAIN:训练;TEST:测试; |
- Param参数包含的元素:
元素 | 解释 |
lr_mult | weight或bias的学习速率 |
decay_mult | weight或bias的衰减因子 |
- 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 |
|
|
- 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 |
- pooling_param参数包含的元素有:
元素 | 解释 |
kernel_size | 必选;(or kernel_h and kernel_w):过滤器的大小 |
pool | 可选;pooling的方法,MAX, AVE, 和STOCHASTIC;默认MAX |
stride | 可选(or stride_h and stride_w) [default1]:指定过滤器的步长 |
|
|
- inner_product_param参数包含的元素如下:
元素 | 解释 |
num_output | 过滤器个数。必选; |
weight_filler | [default type: 'constant' value: 0]:参数的初始化方法 |
bias_filler | 偏置的初始化方法 |
|
|
- weight_filler和bias_filler包含如下元素:
元素 | 解释 |
type | 初始化类型;有“constant”“gaussian”“uniform”“Xavier”等等。常用的是“constant”和“gaussian” |
std | 标准差;如果是gaussian,则可选的设置它;默认值为1; |
mean | 均值;如果是gaussian,则可选的设置它;默认值为0; |
value | 定值;如果是“constant”,则设置它;默认值为0; |
- 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. |