1、数据层是模型的最底层,是模型的入口,不仅提供数据输入,也提供数据从Blobs转换成别的格式进行保存输出,通常的数据预处理(去均值,放大缩小,裁剪和镜像等)也在这一层实现。
2、数据来源可以是高效的数据库(levelDB和LMDB),也可以来自内存,甚至可以是磁盘的HDF5
文件或图片格式文件。
layer{
name: "cifar"
type: "Data"
top: "data"
top:"label"
include{
phase: TRAIN
}
transform_param{
mean_file: "example/cifar10/mean.binaryproto"
}
data_param{
source:"examples/cifar10/cifar_10_train_lmdb"
batch_size: 100
backend: LMDB
}
}
name: 该层的名称
type: 层的类型,如果为Data,表示数据来源于LevelDB或LMDB。根据数据来源的不同,数据类型也不同。
top或bottom: bottom来输入数据,top来输出数据
data与label:在数据层中,至少有一个命名为data的top,如果有第二个,一般为label。这种(data,label)是分类模型所必需的。
include:一般训练的时候和测试的时候,模型的层是不一样的,如果没有指定include的参数,则表示该层即在训练模型中,又在测试模型中。
Transformations: 数据预处理,可以将数据变换到指定的范围定,如果设置scale为0.0003900625,实际上就是1/255,即将输入数据又0-255归一化到0-1之间。
transform_param{
scale:0.00390625
mean_file_size: "examples/cifar10/mean.binaryproto"
#用一个均值文件来进行均值操作
mirror: 1 #1表示开启镜像,0表示关闭
crop_size:227
#裁剪一个227*227的图块,在训练阶段随机裁剪,在测试阶段从中间裁剪
}
后面的data_param部分,就是根据数据来源的不同,来进行不同的设置;
1、数据来源于数据库(levelDB和LMDB)
层类型:Data
必须设置的参数:
source:包含数据库的目录名称,如examples/mnist/mnist_train_lmdb
batch_size: 每次处理的数据个数,如64
可选的参数:
rand_skip:在开始的时候,路过某个数据的输入。通常对异步的SGD很有用。
backend:选择是采用LeveDB还是LMDB,默认是LevelDB
示例 :
layer{
name: "mnist"
type: "Data"
top: "data"
top: "label"
include{
phase: TRAIN
}
transform_param{
scale: 0.00390625
}
data_param{
source: "example/mnist/mnist_train_ldb"
batch_size: 64
backend: LMDB
}
}
2、数据来自于内存
层类型: MemoryData
必须设置的参数:
batch_size: 每一次处理的数据个数
channels:通道数
height: 高度
width:宽度
示例:
layer{
top: "data"
top: "label"
name: "memory_data"
type: "MemoryData"
memory_data_param{
batch_size:2
height:100
width:100
channels: 1
}
transform_param{
scale: 0.0078125
mean_file: "mean.proto"
mirror:false
}
}
3、数据来源于HDF5
层类型:HDF5Data
必须设置的参数:
source:读取的文件名称
batch_szie: 每一次处理的数据个数
示例:
layer{
name: "data"
type: "HDF5Data"
top: "data"
top: "label"
hdf5_data_param{
source: "examples/hdf5_classification/data/train.txt"
batch_size: 10
}
}
4、数据来自于图片
层类型:ImageData
必须设置的参数:
source: 一个文本文件的名字,每一行给定一个图片文件的名称的标签
batch_size: 每一次处理的数据的个数,即图片数
可选的参数:
rand_skip: 在开始的时候,路过某个数据的输入,通常对异步的SGD很有用
shuffle:随机打乱顺序,默认值为false
new_height_width: 如果没有设置,则将图片进行resize
示例:
layer{
name: "data"
type: "ImageData"
top: "data"
top: "label"
transform_param {
mirror: false
crop_size:227
mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
}
image_data_param{
source: "exmaples/_temp/file_list.txt"
batch_size: 50
new_height: 256
new_width: 256
}
}
5、数据来源于Windos
必须设置的参数:
source: 一个文本文件的名字
batch_size: 每一次处理的数据个数,即图片数
示例:
layer {
name: "data"
type: "WindowData"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
}
window_data_param {
source: "examples/finetune_pascal_detection/window_file_2007_trainval.txt"
batch_size: 128
fg_threshold: 0.5
bg_threshold: 0.5
fg_fraction: 0.25
context_pad: 16
crop_mode: "warp"
}
}