网站设计师的专业知识游戏推广拉人渠道
caffe总结(二)
- 一、模型要素
- 1、网络模型(以LeNet-5为例)
- 2、参数配置
- 二、caffe数据
- 1、caffe.proto文件
- 2、caffe数据库
- 3、Caffe Blob
上文讲解了如何配置caffe的windows运行环境,本文主要总结了基于caffe的网络模型要素及构成、数据库类型。
caffe模型是一个端到端的机器学习引擎,通过合成各层的输出来计算梯度函数,同时通过合成各层的向后传播过程计算损失函数的梯度,从而完成学习任务。
一、模型要素
caffe模型需要两个重要的参数文件:网络模型和参数配置,分别是*.prototxt及*.solver.prototxt。
1、网络模型(以LeNet-5为例)
- data输入层为数据层,一般包括训练数据和测试数据两种类型。其中,source字段指名数据路径,batch_size为批处理数据大小(同一类型图片取值大小看GPU运算能力),scale表示数据在[0,1]之间,backend选择数据类型。
name: "LeNet-5"
layer {name: "mnist"type: "Data"top: "data"top: "label"include {*phase: TRAIN*}transform_param {*scale:* 0.00390625}data_param {*source:* "test_data/MNIST/train"*batch_size:* 64backend: LMDB}
}
layer {name: "mnist"type: "Data"top: "data"top: "label"include {*phase: TEST*}transform_param {scale: 0.00390625}data_param {source: "test_data/MNIST/test"batch_size: 100backend: LMDB}
- convoluation卷积层,bottom为输入层名称,top为输出层名称,bolbs_lr:1,bolbs_lr:2分别表示weight与bias更新时的学习率,这里权重的学习率为solver.prototxt文件中定义的学习率,bias的学习率是weight学习率的2倍,这样收敛速度一般较快。num_output表示滤波的个数,kernel_size表示滤波的大小,stride表示步长,weight_filter表示滤波的类型。
layer {name: "conv1"type: "Convolution"bottom: "data"top: "conv1"param {lr_mult: 1}param {lr_mult: 2}convolution_param {num_output: 20kernel_size: 5stride: 1weight_filler {type: "xavier"}bias_filler {type: "constant"}}
}
- pooling池化层,池化方式分为最大值池化及均值池化。
layer {name: "pool1"type: "Pooling"bottom: "conv1"top: "pool1"pooling_param {pool: MAXkernel_size: 2stride: 2}
- 全连接层
layer {name: "ip1"type: "InnerProduct"bottom: "pool2"top: "ip1"param {lr_mult: 1}param {lr_mult: 2}inner_product_param {num_output: 500weight_filler {type: "xavier"}bias_filler {type: "constant"}}
}
- ReLU激活函数,非线性变化层max(0,x),一般与卷积层成对出现。
layer {name: "relu1"type: "ReLU"bottom: "ip1"top: "ip1"
}
- Softmax层
layer {name: "loss"type: "SoftmaxWithLoss"bottom: "ip2"bottom: "label"top: "loss"
}
2、参数配置
以SSD的solver.prototxt为例解释其中参数的含义。
train_net: "models/VGGNet/VOC0712/SSD_300x300/train.prototxt"
test_net: "models/VGGNet/VOC0712/SSD_300x300/test.prototxt"
test_iter: 619
test_interval: 10000
base_lr: 0.001
display: 10
max_iter: 120000
lr_policy: "multistep"
gamma: 0.1
momentum: 0.9
weight_decay: 0.0005
snapshot: 80000
snapshot_prefix: "models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300"
solver_mode: GPU
device_id: 0
debug_info: false
snapshot_after_train: true
test_initialization: false
average_loss: 10
stepvalue: 80000
stepvalue: 100000
stepvalue: 120000
iter_size: 1
type: "SGD"
eval_type: "detection"
ap_version: "11point"
train/test_net: 训练/测试的模型文件路径。
test_iter: 测试的时候需要迭代的次数。test_iter*batch_size(测试集)=测试集大小。caffe中的一次迭代指一个batch,而不是一张图片。
test_interval: 指每迭代多少次进行一次测试。
base_lr: 基础学习率。在优化的过程中,该参数的调整方式会根据lr_policy进行确定。
display: 每迭代多少次显示一次结果。
max_iter: 最大迭代次数。
lr_policy: 学习策略。
- fixed:固定学习率basr_lr不变。
- inv:basr_lr=base_lr * (1 + gamma * iter) ^ (- power)
- step:basr_lr=base_lr * gamma ^ (floor(iter / step))
- exp:basr_lr=base_lr * gamma ^ iter
- multistep:与step类似,但step取决于stepvalue。
- poly:basr_lr=base_lr (1 - iter/max_iter) ^ (power)
- sigmoid:basr_lr=base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
gamma: 与学习率相关的参数,学习率什么时候衰减与stepsize(衰减步长)有关,而衰减多少则与gamma有关。衰减后的学习率lr=lr*gamma。
momentum: 上一次梯度更新的权重。
weight_decay: 权重衰减,防止过拟合。
snapshot: 权重文件保存间隔。
snapshot_prefix: 权重文件保存前缀。
solver_mode: 优化模式。可选CPU模式或者GPU模式。
device_id: GPU序列号,默认从0开始。
debug_info: 是否显示debug信息。
snapshot_after_train: 是否在训练结束后保存一个snapshot文件。便于以后可以在此基础上继续训练。
test_initialization: 确保内存可用并且输出loss的初始值。
average_loss: 显示loss为之前average_loss个loss的平均值。
stepvalue: lr_policy为multistep时的stepsize。
iter_size: 每处理iter_size*batch_size张图片后进行一次梯度计算。
type: 优化算法的类型。
eval_type: 评价类型。
ap_version: 计算平均准确率的方法。有11point、MaxIntegral、Integral三种。
二、caffe数据
1、caffe.proto文件
Caffe的网络模型利用protocol buffer(prototxt)语言定义后存放在caffe.proto文件中,其优势:
(1)二进制字符串尺寸最小,序列化比较高效;
(2)文本格式易读,与二进制版本兼容;
(3)多语言接口,如C++和Python。
2、caffe数据库
caffe数据库支持三类格式:LevelDB、LMDB和HDF5。
原始图片文件可以通过convert_imageset.cpp转换成caffe框架支持的数据库文件格式,此文件源代码在tools文件夹下,生成的可执行文件在build/tools目录下,使用命令:
convert_imageset [FLAGS] ROOTFOLDER/LISTFILE DB_NAME
- FLAGS:图片参数组,-gray灰度图片,-shuffle随机打乱;
- ROOTFOLDER:图片存放的绝对路径;
- LISTFILE:图片列表清单,一般为一个txt文件,一行一张图片,文件中带不带路径主要与txt文件和图片文件存放位置有关;
- DB_NAME:生成的数据库文件存放目录。
3、Caffe Blob
Caffe使用Blob结构存储、交换和处理网络中正向和反向迭代的数据和导数信息。Blob是Caffe的标准数组结构,提供了caffe的统一内存接口。
一般对批量图像数据,Blob的维度为图像数量N×通道数K×图像高度H×图像宽度W。
例如,在96个空间的卷积层维度为11×11,输入为3通道的滤波器,则Blob的维度为96×3×11×11。
虽然caffe在图像应用中的Blob都是四维坐标,对于非图像应用也完全可以正常使用。