数据层
数据层是模型最底层,提供提供数据输入和数据从Blobs转换成别的格式进行保存输出,通常数据预处理(减去均值,放大缩小,裁剪和镜像等)也在这一层设置参数实现.
参数设置:
- name: 名称
- type: 类型
- Data: 从LMDB读取数据和标签, 转换(http://deepdish.io/2015/04/28/creating-lmdb-in-python/) 可以使用convert_imageset转换
- ImageData: 直接读取图片数据
- ....
- top: 输出数据(和下一层的bottom一样)
- bottom: 输入数据()
- include: 一般训练和测试的时候,模型层不一样,由include指定在哪一层出现, TRIAN/TEST
- transform_params: 数据预处理 data_params: 数据参数
- source: 数据位置
- backend
- batchsize: 设置batch的大小
例如,caffe中自带的mnist example
layer { name: "mnist" #名称 type: "Data" #输入的是LMDB数据,前面的create_mnist.sh做了转换 include: TRIAN #只在训练的时候才包括(测试没有label) transform_param { scale: 0.00390625 #缩放参数 } data_param { source: "examples/mnist/mnist_train_lmdb" #数据来源是在当前文件夹中的 mnist_train_lmdb中 backend: LMDB batch_size: 64 #batch的大小 } top: "data" #第一层输出data和label, 无bottom top: "label" # }
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
视觉层
卷积层
卷积的目的是提取feature
- name: 名称
- type: 层类型
- bottom: 输入
- top: 输出
- lr_mt: 学习率速率, 最终学习率是这个数乘以solver.prototxt 配置文件中的base_lr; 如果有两个lr_mt一个表示偏置学习率,一个表示权值学习率
- num_outputs: filter的个数
- kernel_size: 卷积核大小
- stride: 步长
- pad: 边缘扩充
- weight_filler: 权值初始化, 默认为constant, 值全为0,经常用xavier, 也可设置为gaussian
- bias_filler: 偏置初始化方法, 一般偏置初始化方法可以不设置
例如:
layer { name: "conv1" #名称 type: "Convolution" #层类型 bottom: "data" #上一层输入数据 top: "conv1" #这一层输出数据 param { lr_mult: 1 #权重学习率速率 } param { lr_mult: 2 #偏置学习率速率 } convolution_param { num_output: 20 #filter的个数 kernel_size: 5 #卷积核的大小 stride: 1 weight_filler { type: "xavier" #权重初始化方法 } bias_filler { type: "constant" #偏置初始化方法 } } }
池化层
减少数据量和数据维度
- kernel_size:池化核大小
- pool: 池化方法, max, ave, stochastic
- pad:
- stride
Normalization