没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
一.数据层及参数
要运行 caffe,需要先创建一个模型(model),如比较常用的 Lenet,Alex 等, 而一个模
型由多个屋(layer)构成,每一屋又由许多参数组成。所有的参数都定义在 caffe.proto 这个
文件中。要熟练使用 caffe,最重要的就是学会配置文件(prototxt)的编写。
层有很多种类型,比如 Data,Convolution,Pooling 等,层之间的数据流动是以 Blobs 的方
式进行。
今天我们就先介绍一下数据层.
数据层是每个模型的最底层,是模型的入口,不仅提供数据的输入,也提供数据从 Blobs
转换成别的格式进行保存输出。通常数据的预处理(如减去均值, 放大缩小, 裁剪和镜像等),
也在这一层设置参数实现。
数据来源可以来自高效的数据库(如 LevelDB 和 LMDB),也可以直接来自于内存。如
果不是很注重效率的话,数据也可来自磁盘的 hdf5 文件和图片格式文件。
所有的数据层的都具有的公用参数:先看示例
layer {
name: "cifar"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mean_file: "examples/cifar10/mean.binaryproto"
}
data_param {
source: "examples/cifar10/cifar10_train_lmdb"
batch_size: 100
backend: LMDB
}
}
name: 表示该层的名称,可随意取
type: 层类型,如果是 Data,表示数据来源于 LevelDB 或 LMDB。根据数据的来源不同,
数据层的类型也不同(后面会详细阐述)。一般在练习的时候,我们都是采用的 LevelDB 或
LMDB 数据,因此层类型设置为 Data。
top 或 bottom: 每一层用 bottom 来输入数据,用 top 来输出数据。如果只有 top 没有
bottom,则此层只有输出,没有输入。反之亦然。如果有多个 top 或多个 bottom,表示有
多个 blobs 数据的输入和输出。
data 与 label: 在数据层中,至少有一个命名为 data 的 top。如果有第二个 top,一般命
名为 label。 这种(data,label)配对是分类模型所必需的。
include: 一般训练的时候和测试的时候,模型的层是不一样的。该层(layer)是属于训练
阶段的层,还是属于测试阶段的层,需要用 include 来指定。如果没有 include 参数,则表示
该层既在训练模型中,又在测试模型中。
Transformations: 数据的预处理,可以将数据变换到定义的范围内。如设置 scale 为
0.00390625,实际上就是 1/255, 即将输入数据由 0-255 归一化到 0-1 之间
其它的数据预处理也在这个地方设置:
transform_param {
scale: 0.00390625
mean_file_size: "examples/cifar10/mean.binaryproto"
# 用一个配置文件来进行均值操作
mirror: 1 # 1 表示开启镜像,0 表示关闭,也可用 ture 和 false 来表示
# 剪裁一个 227*227 的图块,在训练阶段随机剪裁,在测试阶段从中间裁剪
crop_size: 227
}
1、数据来自于数据库(如 LevelDB 和 LMDB)
层类型(layer type):Data
必须设置的参数:
source: 包含数据库的目录名称,如 examples/mnist/mnist_train_lmdb
batch_size: 每次处理的数据个数,如 64
可选的参数:
rand_skip: 在开始的时候,路过某个数据的输入。通常对异步的 SGD 很有用。
backend: 选择是采用 LevelDB 还是 LMDB, 默认是 LevelDB.
示例:
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
}
data_param {
source: "examples/mnist/mnist_train_lmdb"
batch_size: 64
backend: LMDB
}
}
2、数据来自于内存
层类型:MemoryData
必须设置的参数:
batch_size:每一次处理的数据个数,比如 2
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_size: 每一次处理的数据个数
示例:
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: 一个文本文件的名字,每一行给定一个图片文件的名称和标签(label)
batch_size: 每一次处理的数据个数,即图片数
可选参数:
rand_skip: 在开始的时候,路过某个数据的输入。通常对异步的 SGD 很有用。
shuffle: 随机打乱顺序,默认值为 false
new_height,new_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: "examples/_temp/file_list.txt"
batch_size: 50
new_height: 256
new_width: 256
}
}
5、数据来源于 Windows
层类型:WindowData
必须设置的参数:
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"
}
}
二.视觉层(Vision Layers)及参数
本文只讲解视觉层(Vision Layers)的参数,视觉层包括 Convolution, Pooling, Local Response
Normalization (LRN), im2col 等层。
1、Convolution 层:
就是卷积层,是卷积神经网络(CNN)的核心层。
层类型:Convolution
lr_mult: 学习率的系数,最终的学习率是这个数乘以 solver.prototxt 配置文件中的
base_lr。如果有两个 lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率。一
般偏置项的学习率是权值学习率的两倍。
在后面的 convolution_param 中,我们可以设定卷积层的特有参数。
必须设置的参数:
num_output: 卷积核(filter)的个数
kernel_size: 卷积核的大小。如果卷积核的长和宽不等,需要用 kernel_h 和 kernel_w
分别设定
其它参数:
stride: 卷积核的步长,默认为 1。也可以用 stride_h 和 stride_w 来设置。
pad: 扩充边缘,默认为 0,不扩充。 扩充的时候是左右、上下对称的,比如卷积核
的大小为 5*5,那么 pad 设置为 2,则四个边缘都扩充 2 个像素,即宽度和高度都扩充了 4
个像素,这样卷积运算之后的特征图就不会变小。也可以通过 pad_h 和 pad_w 来分别设定。
weight_filler: 权值初始化。 默认为“constant",值全为 0,很多时候我们用"xavier"
算法来进行初始化,也可以设置为”gaussian"
bias_filler: 偏置项的初始化。一般设置为"constant",值全为 0。
bias_term: 是否开启偏置项,默认为 true, 开启
group: 分组,默认为 1 组。如果大于 1,我们限制卷积的连接操作在一个子集内。
如果我们根据图像的通道来分组,那么第 i 个输出分组只能与第 i 个输入分组进行连接。
输入:n*c0*w0*h0
输出:n*c1*w1*h1
其中,c1 就是参数中的 num_output,生成的特征图个数
w1=(w0+2*pad-kernel_size)/stride+1;
h1=(h0+2*pad-kernel_size)/stride+1;
如果设置 stride 为 1,前后两次卷积部分存在重叠。如果设置 pad=(kernel_size-1)/2,则运算后,
宽度和高度不变。
示例:
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 1
}
剩余24页未读,继续阅读
资源评论
- 漫雪木屋2018-06-23写的很好,谢谢分享。
ll274119329
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功