使用cifar10训练
1. 参数设置
net: "examples/cifar10/cifar10_quick_train_test.prototxt" #训练和测试网络的配置文件
test_iter: 100 #进行一次测试需要的迭代次数,因为测试时,batch为100,一共10000张测试图片所以此处为100
test_interval: 500 #测试间隔
base_lr: 0.001 #基础学习率,每一层的学习率是base_lr的倍数
momentum: 0.9 #动量,,一般取值在0.5--0.99之间。通常设为0.9,momentum可以让使用SGD的深度学习方法更加稳定以及快速
weight_decay: 0.004 #权重衰减项,防止过拟合的一个参数
# The learning rate policy
lr_policy: "fixed"
// lr_policy设置参数:
//- 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))))
#gamma: 0.1 //学习率变化的比率
#stepsize: 3000 //每迭代3000次,调整一次学习率
# Display every 100 iterations
display: 100 #每100次显示一次
# The maximum number of iterations
max_iter: 10000
# snapshot intermediate results
snapshot: 10000 #每迭代10000次,保存一次训练权值
snapshot_format: HDF5
snapshot_prefix: "examples/cifar10/cifar10_quick" #保存权值路径
# solver mode: CPU or GPU
solver_mode: GPU
2. 使用snapshot来继续网络训练
我们在前面的训练中通过snapshot可以将迭代到一定次数的模型保存下来,因为在训练刚开始我们可以
设置比较大一点的学习率,然后在看到有收敛的趋势时,可以将在之前模型训练的基础上,调小学习率继续
训练,这样可以达到一个比较好的收敛效果。
具体只要按下面训练设置就可以了。如果载入成功,Ubuntu的终端会显示的迭代次数是从4000开始的。
$TOOLS/caffe train \
--solver=examples/cifar10/cifar10_quick_solver_lr1.prototxt \
--snapshot=examples/cifar10/cifar10_quick_iter_4000.solverstate.h5
3. 通过caffe自带的脚本绘制loss和accuracy等
在训练过程中画出accuracy 和loss曲线能够更直观的观察网络训练的状态,以便更好的优化网络的训练。具体操作步骤如下:
1. 将训练日志保存
$TOOLS/caffe train --solver=$SOVEFILEPROTOX 2>&1 |tee out.log
- 解析日志文件
使用tools/extra文件夹下的parse_log.py来解析日志。命令如下:
python ./tools/extra/parse_log.py ./out.log ./
行结束之后会发现在你保存的路径中会生成两个文件out.log.train和out.log.test。
3. 绘制曲线
Supported chart types:
0: Test accuracy vs. Iters
1: Test accuracy vs. Seconds
2: Test loss vs. Iters
3: Test loss vs. Seconds
4: Train learning rate vs. Iters
5: Train learning rate vs. Seconds
6: Train loss vs. Iters
7: Train loss vs. Seconds
我们要画一下train loss,则使用:
python ./tools/extra/plot_training_log.py 6 trainloss.png ./out.log
结果如下:
我们可以看出train_loss收敛在0.5左右。
现在让我们继续画一个accuracy,结果如下:
4.对比实验
下周任务吧,机器子太慢,慢慢等吧。