caffe solver.ptototxt详解

来源:互联网 发布:终结者创世纪知乎 编辑:程序博客网 时间:2024/05/22 07:54
caffe中文社区:http://caffecn.cn/caffe中solver参数详解# The train/test net protocol buffer definition# this follows "ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION"# 自己定义的网络结构,也可以将训练用的网络结构和测试用的网络结构分别定义# train_net: "examples/mnist/train.prototxt"# test_net: "examples/mnist/test.prototxt"net: "examples/mnist/lenet_train_test.prototxt"# test_iter specifies how many forward passes the test should carry out.# In the case of MNIST, we have test batch size 100 and 100 test iterations,# covering the full 10,000 testing images.# 测试迭代次数,需要结合lenet_train_test.prototxt中测试阶段的输入数据来看# 就是最下面的那个数据层,最下面的那个层批处理大小是100的话,有10000个数据,因此,需要迭代10000/100=100次test_iter: 100# Carry out testing every 500 training iterations.# 测试间隔,也就是每训练500次,测试一次test_interval: 500# All parameters are from the cited paper above# 学习率的设置:基础学习率,也可以认为是初始化学习率base_lr: 0.001# 上一次梯度权重,为什么要加这个权重?因为在有些优化求解的算法中,梯度更新的方向是呈现锯齿形状的,因此,为了让梯度更新的方向# 朝着总体是最优的方向进行,需要考虑上一次梯度的更新,而在物理学中理解来看,就是:动量,因此,加入该参数后权重的更新是上次权重与这次更新权重的加权和momentum: 0.9momentum2: 0.999# since Adam dynamically changes the learning rate, we set the base learning# rate to a fixed value# 学习率的更新策略,下面有学习率更新策略可选的参数lr_policy: "fixed"# Display every 100 iterationsdisplay: 100# The maximum number of iterationsmax_iter: 10000# snapshot intermediate results# 每5000次保存一次中间结果,方便下次继续进行训练snapshot: 5000snapshot_prefix: "examples/mnist/lenet"# solver mode: CPU or GPU# 优化求解方法,可选方法见下面的具体讲解type: "Adam"solver_mode: GPU一般的solver里面还会有一个权重衰减项:weight_decay: 0.0005网络权值越大往往overfitting的程度越高,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权重的平方乘以一个衰减常量之和

这里写图片描述

右边项即用来惩罚大权值。权值衰减惩罚项使得权值收敛到较小的绝对值,而惩罚大的权值。从而避免overfitting的出现。 lr_policy,学习率更新策略,可以设置为下面这些值,相应的学习率的计算为(下面的iter是当前的迭代次数):        - 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))))关于学习率,还需要记住的是,每一层都有两个学习率lr_mult,一个是该层的参数,一个是该层的偏置(激活层与池化层没有这两项),例如,下面的卷积层和全连接层layer {  name: "conv2"  type: "Convolution"  bottom: "pool1"  top: "conv2"  param {    lr_mult: 1  }  param {    lr_mult: 2  }  convolution_param {    num_output: 20    kernel_size: 5    stride: 1    pad: 2    weight_filler {      type: "xavier"    }    bias_filler {      type: "constant"    }  }}layer {  name: "ip1.1"  type: "InnerProduct"  bottom: "res2a"  top: "ip1.1"  param {    lr_mult: 1  }  param {    lr_mult: 2  }  inner_product_param {    num_output: 100    weight_filler {      type: "xavier"    }    bias_filler {      type: "constant"    }  }}caffe提供了以下几种优化求解方法:    Stochastic Gradient Descent (type: "SGD"),    AdaDelta (type: "AdaDelta"),    Adaptive Gradient (type: "AdaGrad"),    Adam (type: "Adam"),    Nesterov’s Accelerated Gradient (type: "Nesterov") and    RMSprop (type: "RMSProp")layer {  name: "mnist"  type: "Data"  top: "data"  top: "label"  include {    phase: TEST  }  transform_param {    scale: 0.00390625  }  data_param {    source: "examples/mnist/mnist_test_lmdb"    batch_size: 100    backend: LMDB  }}
0 0
原创粉丝点击