前言:
最近时间有裕,因此想将之前了解到的Caffe框架模型训练的事情整理一下。
本部分会涉及:
1.Caffe框架的安装
2.Caffe框架的基本组成
3.Caffe框架中参数简介
3.1 trainval.prototxt 文件解析
3.2 solver.prototxt 文件参数解析
3.2.1 学习策略(lr_policy)解析
正文:
1.Caffe框架的安装:
安装环境: Ubuntu16.04
显卡资源: 2080ti 11G显存
安装步骤:点击这里
2.Caffe框架的基本组成
|------Caffe Project
|
|---lenet_5_trainval.prototxt # 模型文件
|
|---lenet_5_solver.prototxt # 模型训练超参数文件
|
|---lenet_5_train.sh # 模型训练执行脚本文件
其中,lenet_5_train.sh文件如下:
#! /usr/bin/env sh
./build/tools/caffe train \
--solver = "xxx/lenet_5_solver.prototxt" # 模型训练超参数文件
--weights = "xxx/lenet_5.caffemodel" # 加载预训练模型文件
--gpu 1 2>&1 | tee /home/xxx/lenet_5.log # 调用gpu资源并存储训练日志文件
lenet_5_train.sh文件中调用了编译好的build/tools/caffe.bin 二进制文件,
参数--solover指定了训练超参数文件;
参数--weights指定了预训练模型文件;
参数--gpu指定了显卡设备号以及训练日志文件存储路径.
3.Caffe框架中参数简介
3.1trainval.prototxt 文件解析
可参考《深度学习 21天实战Caffe》P60-64
3.2solver.prototxt 文件参数解析
# 用于训练/预测的网络描述文件
net: "examples/mnist/lenet_5_trainval.prototxt"
# 预测阶段每次预测的样本个数
# test_iter = num_test_sample/batch_size(test)
test_iter:100
# 训练阶段每次预测的迭代间隔次数(即迭代500次对测试集样本做一次预测)
# test_interval = num_train_sample/batch_size(train)
test_interval:500
# 网络模型的基础学习率、冲量、权重衰量
base_ir:0.01
momentum:0.9
weight_decay:0.0005
# 学习率的衰减策略
ir_policy:"inv"
gamma:0.0001
power:0.75
# 每迭代100次,在屏幕上打印一次log
display:100
# 最大迭代次数
max_iter:10000
# 每5000次存储一次模型文件
snapshot:5000
snapshot_prefix:"example/mnist/lenet_5"
# Caffe 训练资源配置
solver_mode:GPU
其中,snapshot 用于设置训练多少次后进行保存,默认为0,不保存。snapshot_prefix 为设置保存路径。也可以设置 snapshot_format,保存的类型。有两种选择:HDF5 和 BINARYPROTO ,默认为 BINARYPROTO。
3.2.1 学习策略(lr_policy)解析
a.fixed
fixed: always return base_lr.
parameters:
base_lr: 0.01
lr_policy: "fixed"
b.step
step: return base_lr * gamma ^ (floor(iter / step))
parameters:
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 30
max_iter: 100
c.exp
exp: return base_lr * gamma ^ iter
parameters:
base_lr: 0.01
lr_policy: "exp"
gamma: 0.1
max_iter: 100
d.inv
inv: return base_lr * (1 + gamma * iter) ^ (- power)
parameters:
base_lr: 0.01
lr_policy: "inv"
gamma: 0.1
power: 0.75
max_iter: 10000
e.multistep
multistep: similar to step but it allows non uniform steps defined by stepvalue
parameters:
base_lr: 0.01
lr_policy: "multistep"
gamma: 0.5
stepvalue: 1000
stepvalue: 3000
stepvalue: 4000
stepvalue: 4500
stepvalue: 5000
max_iter: 6000
f.poly
poly: the effective learning rate follows a polynomial decay,
to be zero by the max_iter. return base_lr (1 - iter/max_iter) ^ (power)
parameters:
base_lr: 0.01
lr_policy: "poly"
power: 0.5
max_iter: 10000
g.sigmoid
sigmoid: the effective learning rate follows a sigmod decay return base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
parameters:
base_lr: 0.01
lr_policy: "sigmoid"
gamma: -0.001
stepsize: 5000
max_iter: 10000
此外,还有比较关键的几个训练超参数:
average_loss:
相当于做了一个平滑. 控制台打印训练loss时, 当前loss为最近20个iteration的loss的平均数. 仅仅是为了显示好看, 不影响训练.
iter_size:
当你的显卡显存不足时,该参数可以有效解决batch_size的问题.该参数的作用为: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.cnblogs.com/dengdan890730/p/6273679.html