Caffe训练准备--整合译Intel官方指南、caffe官方文档

Layers

欲创建一个Caffe模型,你需要在一个协议文件(prototxt)中定义你的模型结构

caffe的层级及其参数又定义在了官方的协议文件caffe.proto

数据集准备

将自己的训练集转换为LMDB的caffe支持数据库格式;

不难理解,这一步就是将你庞杂的图像训练集整合到一个数据库文件中,具体操作是将每一个需要用到的图像的路径 以及它的分类标签按照:

路径 + 空格 + 分类号

的格式整合在一个train.txt文本文件中。如果数据分散在不同的文件夹中,也大可使用绝对路径,因为生成了LMDB文件后将不再需要用到这些文件的实体,仅仅在生成的过程时要保证路径的正确性。

  • 怎样来生成这样一个txt文件?    
可以利用高级语言(python、c++、java等 我用的是python 可以根据自己的需求对症下药)的文件读写操作读取文件列表信息并按照格式写入train.txt,这件事情其实很简单。

如果数据通道统一:

#!/usr/bin/env sh (linux下包含sh)
# 包含训练和验证图像的文件夹
TRAIN_DATA_ROOT=/path/to/training/images
 
# 包含具有训练图像名称文件的文件夹
DATA=/path/to/file
# lmdb数据设定文件夹
OUTPUT=/path/to/output/directory
TOOLS=/path/to/caffe/build/tools
 
# 将图像设置为指定大小(px)
RESIZE_HEIGHT=256
RESIZE_WIDTH=256
echo "Creating train lmdb..."
 
# 如果不需要打乱顺序则注释shuffle行
GLOG_logtostderr=1 $TOOLS/convert_imageset 
    --resize_height=$RESIZE_HEIGHT 
    --resize_width=$RESIZE_WIDTH 
    --shuffle 
    $TRAIN_DATA_ROOT/ 
    $DATA/train.txt 
    $OUTPUT/mydataset_train_lmdb
echo "Done."

训练

训练要求:

  • train_val.prototxt:定义网络架构、初始化参数和本地学习速度
  • solver.prototxt:定义优化/训练参数,并作为调用的实际文件来训练深度网络
  • deploy.prototxt:仅在测试中使用。必须与 train_val.prototxt 完全相同,输入层、损失层和权重初始化(例如 weight_filler)除外,因为后两个在 deploy.prototxt 中不存在。
层以及层中的 blob 具有相同的名称很常见,但是并不是必需的。在每层的 prototxt 文件中, nametop 通常是相同的。

以LeNet为例:

solver.prototxt

# 训练/验证网络协议--训练框架
net:"examples/mnist/lenet_train_test.prototxt"
 
# batch_size = 1 : 在一次批处理中向前传播遍历所有图片
 
# 每500次训练迭代 验证1次
test_interval:500
 
# test_iter指定了需要执行多少次向前传播的验证测试
# 推荐填写num_val_imgs 或 batch_size (batch_size的数值在测试阶段数据层中的train_test.prototxt里)
test_iter:100
 
# 网络的学习率, 学习参数和权重衰减.
base_lr:0.01
momentum:0.9
weight_decay:0.0005
 
# 最初会迅速的靠近局部最小值,然后会在很接近时放慢速度
# 之后,有多种学习策略可供选择:
#  fixed: 总是返回 base_lr.
#  step: 返回 base_lr * gamma ^ (floor(iter / step))
#  exp: 返回 base_lr * gamma ^ iter
#  inv: 返回 base_lr * (1 + gamma * iter) ^ (- power)
#  multistep: 和step法差不多但是允许不均匀的步长值定义
#  poly: 遵循一个衰减多项式的有效学习率(从0到max_iter): return base_lr (1 - iter/max_iter) ^ (power)
#  sigmoid: 遵循sigmod衰变: 返回base_lr * ( 1/(1 + exp(-gamma * (iter - stepsize))))
lr_policy:"step"
gamma:0.1
stepsize:10000 # 步长:根据一个γ因子,每stepsize次迭代降低学习率
 
# 每100次迭代提示一次
display:100
 
# 最大迭代数
max_iter:10000
 
# 中间结果的快照,也就是每5000次迭代会存储一份权值快照
snapshot:5000
snapshot_prefix:"examples/mnist/lenet_multistep" #保存快照的路径
 
# solver mode:CPU 或 GPU
solver_mode:CPU

划几个重点:

  • batch_size过小,造成效率低下,过大则达到同样精度时间过长,batch_size的选择并没有一个准绳
  • 可以在快照snapshot的基础上继续训练,记得要保存snapshot,如果遇到断电什么的不要着急
  • 可在几次训练后适当降低学习率base_lr



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值