您的位置:首页 > 理论基础 > 计算机网络

caffe中网络结构参数详解

2016-09-06 16:21 393 查看
prototxt文件是caffe的配置文件,用于保存CNN的网络结构和配置信息。prototxt文件有三种,分别是deploy.prototxt,train_val.prototxt和solver.prototxt。

1. solver.prototxt

solver.prototxt是caffe的配置文件。里面定义了网络训练时候的各种参数,比如学习率、权重衰减、迭代次数等等。下面详细说明每一个参数所代表的意义:
test_iter: 299
test_interval: 224
base_lr: 0.01
display: 20
max_iter: 6720
lr_policy: "step"
gamma: 0.1
momentum: 0.9
weight_decay: 0.0001
stepsize: 2218
snapshot: 224
snapshot_prefix: "snapshot"
solver_mode: GPU
net: "train_val.prototxt"
solver_type: SGD

test_iter:表示网络的测试迭代次数。网络一次迭代将一个batchSize的图片进行测试,所以为了能将validation集中所有图片都测试一次,这个参数乘以TEST的batchSize应该等于validation集中图片总数量。即test_iter*batchSize=val_num。

test_interval:表示网络迭代多少次进行一次测试。一次迭代即一个batchSize的图片通过网络正向传播和反向传播的整个过程。比如这里设置的是224,即网络每迭代224次即对网络的准确率进行一次验证。一般来说,我们需要将训练集中所有图片都跑一编,再对网络的准确率进行测试,整个参数乘以网络data层(TRAIN)中batchSize参数应该等于训练集中图片总数量。即test_interval*batchSize=train_num。

base_lr:表示网络的基础学习率。学习率过高可能导致loss持续86.33333,也可能导致loss无法收敛等等问题。过低的学习率会使网络收敛慢,也有可能导致梯度损失。一般我们设置为0.01。

display: 每多少次显示一次。

max_iter: 网络的最大迭代次数。训练集中的图片当然不能只训练一次就算了,要反复多次的进行训练,所以这个参数应该要大一些。

lr_policy: 学习率变化。

gamma: 学习率变化比率。一般不改。

momentum: 学习的参数。一般不改。

weight_decay: 学习的参数。一般不改。

stepsize: 每多少次学习率递减。这里是迭代2218次学习率递减。

snapshot: 每多少次保存一次学习的结果。即caffemodel。

solver_mode: 设置使用GPU还是CPU进行学习训练。

net:  网络结构的文件路径。

solver_type: 优化算法的选择,一共有六种可选:SGD、AdaDelta、AdaGrad、Adam、Nesterov和RMSProp。默认为SGD。

solver.prototxt文件只在网络进行训练的时候需要载入。是网络训练的一个整体的参数配置文件。

2. deploy.prototxt和train_val.prototx

这两个文件是caffe的网络结构文件。train_val.prototx是训练时候的网络结构,deploy.prototxt用于发布(即测试时候的网络结构)。这两个文件中内容基本一致,但是存在一些细微区别:

在train_val.prototx中网络结构的data层有两种,分别为TRAIN和TEST。顾名思义,TRAIN是网络训练时后的数据结构,TEST是网络做验证时候的数据结构。一般来说TRAIN中的batchSize比TEST中的要大一些。
在train_val.prototx中的卷积层(Convolution)中存在学习率和权重衰减的参数,而deploy.prototxt文件中则没有这些参数(有些deploy.prototxt中仍然有这些参数,但是对测试不起任何作用)。

由于train_val.prototx包含了deploy.prototxt文件中所有的参数定义,所以下面以train_val.prototx文件为例,详细说明每个参数的意义。这里以经典的AlexNet网络为例:

1.data层

layer {
name: "train-data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file: "./mean.binaryproto"
}
data_param {
source: "./train_db"
batch_size: 128
backend: LMDB
}
}

name: 这一层的名字。

type:这一层的类型。

top: 这一层所连接的上一层。注意,网络是从下往上生长的。最底层是数据层,越往上特征越抽象。

phase: TRAIN 表示这一层是训练时候网络的定义。

mirror:是否使用镜像。

crop_size:将输入数据裁剪为227。

mean_file:均值文件的路径。

source:训练集的路径。

batch_size:一次迭代输入的图片数量。

backend:数据集的格式。

2. Convolution层

layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 1.0
decay_mult: 1.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
convolution_param {
num_output: 96
kernel_size: 11
stride: 4
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0.0
}
}
}

lr_mult: 学习率。这里有两个学习率,分别是filter和bias的学习率。

decay_mult::衰减系数。同样有两个,与学习率对应。

num_output::这一层输出的特征图个数。即改成用多少个卷积核去对输入做卷积操作。

kernel_size:卷积核的尺寸。

stride:卷积的步长。

weight_filler {

      type: "gaussian"

      std: 0.01

    }


整个参数是表示使用高斯方法初始化滤波器参数。这里是使用均值为0,方差为0.01的高斯核。

bias_filler {

      type: "constant"

      value: 0.0

    }


整个参数表示使用constant方法初始化偏置。即初始偏置设置为0。







caffe中还有RELU,pooling,LRN,SoftMax,IP,FC等层。这些层参数比较少,也比较容易理解。这里就不详细介绍了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  deep learning caffe