Caffe学习笔记(1)参数阅读

参数说明分为两部分第一部分为Caffe的prototxt中的参数说明第二部分为Digits中的数据库制作以及模型训练中的参数说明

本人caffe新手一枚,各位在阅读的过程中如果发现任何错误,还烦请在评论留言,我会及时改正

首先,第一部分,Caffe中的protptxt的参数说明

(本文中使用的例子是siftflow-fcn32s,可以从github上直接得到他的代码

caffe中的prototx由两个文件组成,一个是solver.protxt用于存放训练过程中的参数设置,另一个是*****网络.prototxt。主要用于存放网络模型结构

solver.prototxt

参数说明:

train_net:存放训练用的网络文件(即prototx文件)

test_net:存放测试用的网络结构文件(即prototx文件)

test_iter: 在测试的时候需要迭代的次数,与测试网络结构文件中的batch_size想关联,一般情况下,test_iter*batch_size=测试集的大小

test_interval:在训练的时候,进行test_interval此训练就测试一次

display:每display次在终端或者IDE中输出loss

average_loss:是每次display的时候看到的loss是多少次的平均值

lr_policy:学习率下降的策略,可选的方式有(1)fixed(2)inv(3)step(4)multistep(5)stepearly(6)poly

一个外国小伙子的解释是这样的(后面会更新,给出各种下降策略的可视化)

// The learning rate decay policy. The currently implemented learning rate

// policies are as follows:

// - fixed: always return base_lr.

// - step: return base_lr * gamma ^ (floor(iter / step))

// - exp: return base_lr * gamma ^ iter

// - inv: return base_lr * (1 + gamma * iter) ^ (- power)

// - multistep: similar to step but it allows non uniform steps defined by

// stepvalue

// - poly: the effective learning rate follows a polynomial decay, to be

// zero by the max_iter. return base_lr (1 - iter/max_iter) ^ (power)

// - sigmoid: the effective learning rate follows a sigmod decay

// return base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

// where base_lr, max_iter, gamma, step, stepvalue and power are defined

// in the solver parameter protocol buffer, and iter is the current iteration.

base_lr:初始的学习率

momentum:灵感来自于牛顿第一定律,基本思路是为寻优加入了“惯性”的影响,这样一来,当误差曲面中存在平坦区的时候,SGD可以更快的速度学习。

wi←m∗wi−η∂E∂wiwi←m*wi−η\frac{∂E}{∂wi}(不明觉厉)

iter_size:

max_iter:train 最大迭代max_iter

weight_decay:(权值衰减)的使用既不是为了提高你所说的收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。

test_initialization:可取值为true或者false,表示是否可以用上次保存的snapshot来继续训练,如果为True,则下次开始训练的时候,caffe会自动从这个目录下加载最近一次迭代的模型,继续训练,以节省时间。 
如果是False,则会从0开始重新迭代。所以这个参数的默认值是False

solver_type:优化算法的选择,一共有六中选择:SGD,AdaDelta、AdaGrad、Adam、Nesterov和RMSProp。默认为SGD。(这里后面会加入详细的算法解释)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

*****网络.prototxt

1、数据层

layer{
  name: "cifar" //本层的名字,也就是数据层的名字,用于和后面其他层的连接的使用
  type: "Data"	//本层的类型,“Data”代表了是这里是数据层,表示数据源是LMDB或者LeveLDB
  top: "data" 
  top: "label"
  include {
    phase: TRAIN //表示只在训练的过程中使用本层
  }
  transform_param {
    mean_file: "examples/cifar10/mean.binaryproto"
  }
  data_param {
    source: "examples/cifar10/cifar10_train_lmdb"
    batch_size: 100
    backend: LMDB
  }
}

transform_param{}大括号中表示输入的时候对数据做的处理

mean_file:(可选项,需要填入路径)表示之前计算的数据均值,计算数据均值可以提高模型的学习速度和精度
mirror:(可选项,0或者1)表示读取数据之后是否对数据进行镜像操作增加数据集的数量,对于小数据集有提升效果
crop_size:(可选)对图像进行裁剪
scale:0.00390625      实际上就是1/255, 即将输入数据由0-255归一化到0-1之间(在遇到了11.0编号的错误之后,在数据层中加入了这个参数就好了)

data_para{}大括号中表示输入数据的信息

source:输入数据的路径

batch_size:每次输入数据的个数

backend:输入数据的数据源的类型,是以LMDB结尾还是以什么巴拉巴拉结尾的

当数据以图片形式输入的时候

layer {
  name: "data"
  type: "ImageData"
  top: "data"
  top: "label"
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
  }
  image_data_param {
    source: "examples/_temp/file_list.txt"
    batch_size: 50
    new_height: 256
    new_width: 256
  }
}
数据的source文件中是图片数据以及他的标注数据信息比如分类任务的时候,txt文件中的每一行都是图片路径加上他的种类

如:/image/aaaaa.jpg  1

在分割任务中就将后面的1或者0等种类信息换成与图片相对应的groundtruth图片

2、卷积层

layer {  
  name: "conv1"  
  type: "Convolution"  
  bottom: "data"  
  top: "conv1"  
  param {  
    lr_mult: 1.0  
    decay_mult: 1.0  
  }  
  param {  
    lr_mult: 2.0  
    decay_mult: 0.0  
  }  
  convolution_param {  
    num_output: 96  
    kernel_size: 11  
    stride: 4  
    weight_filler {  
      type: "gaussian"  
      std: 0.01  
    }  
    bias_filler {  
      type: "constant"  
      value: 0.0  
    }  
  }  
} 

lr_mult:学习率。这里有两个学习率,fenbieshifilter和bias学习率
deacy_mult:衰减系数,同样有两个与学习率相对应
num_output:这一层输出的特这图的个数,即用多少个卷积核去对输入做卷积操作
kernel_size:卷积核的尺寸
stride:卷积核的步长
weight_filler {
      type: "gaussian"
      std: 0.01
    }
上方代码代表的含义是使用高斯方法初始化权重值,设置方差为0.01,这里为设置均值,则默认均值为0,
bias_filler {
      type: "constant"
      value: 0.0
    }
上方代码表示的是将bias的数值以常数0初始化

待更新fc层和softmaxwithloss层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值