Caffe的基本使用

学习文章:https://www.cnblogs.com/denny402/category/759199.html   特别好
参考文章:https://blog.csdn.net/cham_3/article/details/72141753

利用Caffe进行深度神经网络训练第一步需要搞懂几个重要文件:
1、solver.prototxt文件
2、train_val.prototxt文件
3、train.sh文件

一、solver.prototxt文件

solver这个文件主要存放模型训练所用到的一些超参数:
caffe程序运行必带的一个参数就是solver配置文件。运行代码一般为

caffe train --solver=*_slover.prototxt

在Deep Learning中,往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解。solver的主要作用就是交替调用前向(forward)算法和后向(backward)算法来更新参数,从而最小化loss,实际上就是一种迭代的优化算法。
Solver的流程:
1.设计好需要优化的对象,以及用于学习的训练网络和用于评估的测试网络。(通过调用另外一个配置文件prototxt来进行)
2. 通过forward和backward迭代的进行优化来跟新参数。
3. 定期的评价测试网络。 (可设定多少次训练后,进行一次测试)
4. 在优化过程中显示模型和solver的状态
在每一次的迭代过程中,solver做了这几步工作:
1、调用forward算法来计算最终的输出值,以及对应的loss
2、调用backward算法来计算每层的梯度
3、根据选用的slover方法,利用梯度进行参数更新
4、记录并保存每次迭代的学习率、快照,以及对应的状态。

net: net: "ECO_Lite.prototxt"        = 指定待训练模型结构文件,即train_val.prototxt

# testing parameter
test_iteration: 3000                 = 指定测试时进行的迭代次数
test_interval: 1000                  = 测试间隔,即每隔多少次迭代进行一次测试
test_initialization: false           = 指定是否进行初始测试,即模型未进行训练时的测试

# output
display: 20                          = 每隔几次迭代显示一次结果
average_loss: 20                     =相当于做了一个平滑. 控制台打印训练loss时, 当前loss为最近20个iteration的loss的平均数. 仅仅是为了显示好看, 不影响训练.
snapshot: 1000                       = 快照,每隔几次保存一次模型参数
snapshot_prefix: "snapshots/ECO_Lite_kinetics"     = 保存模型文件的前缀,可以是路径
debug_info: false                    = 指定是否打印调试信息,这里有对启用该功能的输出作介绍
#https://blog.csdn.net/cham_3/article/details/67638308

# learning rate
base_lr: 0.001                       = 指定基本学习率
lr_policy: "step"                    = 学习率变更策略
#https://blog.csdn.net/cham_3/article/details/52640668
gamma: 0.1                           = 学习率变更策略需要用到的参数
power := 同上
stepsize: 24000                      = 学习率变更策略Step的变更步长(固定步长)
stepvalue := 学习率变更策略Multistep的变更步长(可变步长)
max_iter: 60000                   = 模型训练的最大迭代次数
iter_size: 3                        #在显存不够用时很管用,它产生的效果是forward iter_size次后才backpropogate一次, 相当于将batch_size增大了iter_size倍.
简单来说, real batch_size = batch_size * iter_size.每执行一次solver.step(1), 会执行batch_size * iter_size次forward与1次backward.
https://www.zhihu.com/question/37270367

# parameter of SGD
solver_type: NESTEROV                         = solver优化策略,即SGD、Adam、AdaGRAD、RMSProp、NESTROVE、ADADELTA等
momentum: 0.9                  = 动量,这是优化策略(Adam, SGD, … )用到的参数
momentum2:                     = 优化策略Adam用到的参数
weight_decay: 0.0005           = 权重衰减率
clip_gradients: 40              = 固定梯度范围

# GPU setting
solver_mode: GPU                = 指定训练模式,即GPU/CPU
device_id:                      = 指定设备号(使用GPU模式),默认为0
richness: 100

二、train_val.prototxt文件

三、train.sh文件

猜你喜欢

转载自blog.csdn.net/u014106566/article/details/85321119