caffe参数详解
转载自:https://blog.csdn.net/qq_14845119/article/details/54929389
solver.prototxt
net:训练预测的网络描述文件,train_test.prototxt
test_initialization:取值为true或者false,默认为true,就是刚启动就进行测试,false的话不进行第一次的测试。
test_iter:在测试的时候,需要迭代的次数,即test_iter* batchsize(测试集的)>=测试集的大小,测试集的 batchsize可以在prototxt文件里设置。
test_interval:训练的时候,每迭代test_interval次就进行一次测试。
base_lr:基础学习速率。
gamma:调节学习速率的因子
power:调节学习速率需要用到的参数
stepsize:每隔stepsize降低学习速率,每隔stepsize,基础学习速率*gamma
stepvalue: "multistep"学习策略需要用到的参数,每到stepvalue,按"step"的方式调整学习速率
lr_policy:
"fixed":固定学习速率,始终等于base_lr
"step":步进衰减,base_lr*gamma^(floor(iter/stepsize))
"exp":指数衰减,base_lr*gamma^(iter)
"inv":倒数衰减,base_lr*(1+gamma*iter)^(-power)
"multistep":多步衰减,与步进衰减类似,允许非均匀步进值(stepvalue)
"ploy":多项式衰减,在max_iter时达到0,base_lr*(1-iter/max_iter)^(power)
"sigmoid":S形衰减,base_lr*(1/(1+exp^(-gamma*(iter-stepsize))))
display:每display次打印一次Loss
max_iter:训练的最大迭代次数
momentum:冲量,灵感来自于牛顿第一定律,基本思路是为寻优加入了“惯性”的影响,这样一来,当误差曲面中存在平坦区的时候,SGD可以更快的速度学习。
weight_decay:权衰量,
snapshot:迭代snapshot次,打印一次快照,即保存一次*.caffemodel,*.solverstate
snapshot_prefix:快照,*.caffemodel,*.solverstate保存的位置
solver_mode:训练模式,可选,CPU,GPU,2种模式
train_test.prototxt
数据层参数:
data:数据层
bottom:输入
top: 输出
type:数据属性,包含3种格式,1种是Data,输入格式为LMDB,LEVELDB,另一种是ImageData,输入格式为*.txt,txt中格式为,路径图片 类别标签,第三种为HDF5Data,该格式支持频谱图、特征向量的输入,
ps:matlab生成HDF5步骤,假设每个特征向量为512维,输入1000个特征向量
%
创建
HDF5
文件,包含
data
和
label
两个变量,数据类型是
caffe
支持的
float
型数据
h5
create('train.h5','/data',[1 1 512 1000],'Datatype','single');
h5create('train.h5','/label',[1 1 1 1000],'Datatype','single');
%reshape: width x height x channels x num
,注意
MATLAB
读数据是列优先,是和
C++
里面相反的。所以写数据的时候也要倒着写。
train_data = reshape(train_data,[1 1 512 1000]);
train_label = reshape(train_label,[1 1 1 1000]);
h5write('train.h5' ,'/data' , single(train_data));
h5write('train.h5' ,'/label', single(train_label));
HDF5Data-layer参数,
layer
{
name: "data"
type: "HDF5Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
hdf5_data_param {
source: "train.txt"
batch_size: 128
shuffle: true
}
}
train.txt内容,shuffle只对H5文件进行乱序,而每个H5文件内部的顺序不动,
train1.h5
train2.h5
...
mean_value:训练图片需要减去的均值,一般为127.5
scale:数据变换使用的数据缩放因子
mirror:是否做镜像操作,可选,true,false
crop_size:crop变换的大小
mean_file:均值文件
source:数据源地址,可以是LMDB或者txt格式的文件
batchsize:批量读取的图片数目
shuffle:是否要打乱图片顺序,使不同类别交叉排列,可选,true,false
backend:数据格式,可选参数,LMDB,LEVELDB
rand_skip:跳过开头的 rand_skip * rand(0,1)个数据,通常在异步随机梯度下降法里使用
卷基层参数:
Convolution:卷基层
lr_mult: 学习率,但是最终的学习率需要乘以 solver.prototxt 配置文件中的 base_lr .
如果有两个 lr_mult, 则第一个表示 weight 的学习率,第二个表示 bias 的学习率
一般 bias 的学习率是 weight 学习率的2倍
blobs_lr:和lr_mult意思一样,有的配置文件也这么写
decay_mult:权值衰减,为了避免模型的over-fitting,需要对cost function加入规范项。
weight_decay: 和decay_mult意思一样,有的配置文件也这么写
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_filter:权值初始化。默认为“constant”,值全为0,很多时候我们用”xavier”算法来进行初始化,也可以设置为”gaussian”
weight_filler {
type: "constant"
value:0
}
weight_filler {
type: "xavier"
}
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filter:偏置项的初始化。一般设置为”constant”,值全为
bias_filler {
type: "constant"
value: 0
}
bias_term:是否开启偏置项,默认为true,开启
group:默认为1,如果大于1,那么将每个滤波器都限定只与某个输入的子集有关联。换句话说,将输入分为group组,同时将输出也分为group组。那么第i组输出只与第i组输入有关。
dilation:atrous(hole algorithms),RFCN中的亮点,可以增大map,提高对小目标的检测。详细可以参考RestNet-res3a,RestNet-OHEM。
AbsVal:使用 abs(x)函数计算每个输入数据 x 的输出
Power:使用函数(shift + scale * x) ^ power 计算每个输入数据 x的输出
power_param {
power: 1
scale: 1
shift: 0
}
BNLL:使用函数log(1 + exp(x)) 计算每个输入数据 x 的输出
Dropout:防止模型过拟合;训练模型时,随机让网络某些隐含层节点的权重不工作,
dropout_param {
dropout_ratio: 0.5 #丢弃数据的概率
}
Eltwise:将2个bottom合并为1个top,合并的方式为,PRODUCT(点乘), SUM(相加减) 和 MAX(取大值),其中SUM是默认操作
bottom相加:
eltwise_param {
operation: SUM
}
bottom相减:
eltwise_param {
operation: SUM
coeff:1
coeff:-1
}
bottom取大值:
eltwise_param {
operation: MAX
}
InnerProduct:也就是全连接层,fully_connected (fc)layer,主要实现,C←αA×B+βC,A为M*K维矩阵,B为K*N维矩阵,C为M*N维矩阵,缺点就是,使用包含全连接层的模型(如AlexNet)必须使用固定大小的输入,有时这是非常不合理的,因为必须对输入图片进行变形
lr_mult,decay_mult,weight_filter,bias_filter
Split:将blob复制为n份,分给不同的Layer,所有Layer共享该blob,实现为1个bottom,n个top
Slice:输入1个bottom,输出n个top,将blob中的数据切分为n份,假设input的维度是N*5*H*W,tops输出的维度分别为N*1*H*W ,N*2*H*W, N*1*H*W, N*1*H*W 。
这里需要注意的是,如果有slice_point,slice_point的个数一定要等于top的个数减一。
axis表示要进行分解的维度,0为N(num)上分解,1为C(channel)上分解。
slice_point的作用是将axis按照slic_point 进行分解。
slice_point没有设置的时候则对axis进行均匀分解。
slice_param {
axis: 1
slice_point: 1
slice_point: 3
slice_point: 4
}
Concat:将多个layer进行组合拼接,输入为n个bottom,输出为1个top,例如,输入k个blob为,n_i*c_i*h*w,则,
axis=0,输出为(n_1+n_2+……+n_k)*c_i*h*w,
axis=1,输出为n_i*(c_1+c_2+……c_k)*h*w,
axis表示要进行分解的维度,0为N(num)上拼接,1为C(channel)上拼接。
concat_param{
axis:1
}
Reduction:将某个维度缩减至1维,方法可以是sum、mean、asum、sumsq。
axis表示要进行缩减的维度,0为N(num)上缩减,1为C(channel)上缩减。
reduction_param {
axis: 0
}
Flatten: 把一个输入的大小为n * c * h * w变成一个简单的向量,其大小为 n * (c*h*w) * 1 * 1。
Reshape: 改变blob的维度,而不改变其自身的数据,每个blob为4维,故有4个dim参数,0代表不改变维度的值,-1代表由caffe计算出值,正数代表将维度更改为对应的值
reshape_param {
shape {
dim: 0 # copy the dimension from below
dim: 2
dim: 3
dim: -1 # infer it from the other dimensions
}
}
Crop:输入两个blob,将bottom[0] 按照bottom[1]的尺寸进行剪裁,
axis=0,1,2,3分别表示为N,C,H,W;默认axis等于2,即默认从H开始裁剪(裁剪H和W);可以只设置1个,也可以为每个dimension分别设置,
offset表示裁剪时的偏移量,
crop_param {
axis: 2
offset: 5
}
BatchNorm:batch归一化层,需要和Scale层一起使用,即一个BatchNorm后面跟一个Scale,use_global_stats训练的时候设置为false,这时caffe会基于当前batch计算均值和方差,测试的时候设置为true,此时会强制使用模型中存储的均值和方差参数。
batch_norm_param{
use_global_stats:true
}
Scale:
scale_param{
bias_term:true
}
LRN(Local ResponseNormalization):AlexNet的产物,后期感觉对performance提升意义不大,local_size ,默认为5,对于cross channel LRN为需要求和的邻近channel的数量,对于within channel LRN为需要求和的空间区域的边长
alpha ,默认为1,scaling参数
beta ,默认为 5,指数
norm_region,默认为ACROSS_CHANNELS,
选择LRN实现的方法:
1. ACROSS_CHANNELS ,输出大小为localsize×1×1,
2. WITHIN_CHANNEL,输出大小为1×localsize×localsize,
lrn_param{
local_size:5
alpha:0.0001
beta:0.75
}
激活层参数:
ReLU:非线性层,使用ReLU作为激活函数,对于给定的一个输入值x,如果x > 0,ReLU层的输出为x,如果x < 0,ReLU层的输出为0,可选参数negative_slope,此参数使得x <0时,ReLU层的输出为negative_slope * x,类似于PReLU的功能,RELU层支持原址计算(in-place)
relu_param{
negative_slope: [默认:
0]
}
PReLU: 非线性层,使用PReLU作为激活函数,在负半轴的输出乘以一个系数,而这个系数是可学习的(你可以为其指定学习率),其中value是系数的初始值,channel_shared指定是否在各个通道间共享这个系数。
prelu_param {
filler: {
value: 0.33 #:默认为
0.25
}
channel_shared: false
}
TanH: 使用 tanh(x)函数作为激活函数计算每个输入数据 x的输出
损失层参数:
SoftmaxWithLoss:类似svm,用于分类的层,输入blob为ip和label,这里注意label要从0开始(2个bottom),输出blob为loss(1个top),用于单标签多分类任务,各概率相互不独立,总和为1,这里需要注意一下,softmax有一个默认的隐含的参数,loss_weight,默认该值为1,所以大部分的时候,尤其是只有1个Loss的时候是不写这个的。但是当有多个Loss的时候,loss_weight的设置就很有必要了,例如下面的center_loss
SigmoidCrossEntropyLoss:S形交叉熵损失,用于目标概率分布和多标签多分类任务,各概率相互独立
layer{
name:"loss"
type:" SigmoidCrossEntropyLoss"
bottom:"loss3/classifier"
bottom:"label"
top:"loss"
}
EuclideanLoss:欧式距离损失,适用于实数值回归问题,
layer{
name:"loss"
type:" EuclideanLoss "
bottom:"loss3/classifiersigmoid"
bottom:"label"
top:"loss"
}
HingeLoss:铰链损失,norm支持L1,L2,默认norm为L1,
# L1 Norm
layer {
name: "loss"
type: "HingeLoss"
bottom: "pred"
bottom: "label"
}
# L2 Norm
layer {
name: "loss"
type: "HingeLoss"
bottom: "pred"
bottom: "label"
top: "loss"
hinge_loss_param {
norm: L2
}
}
ContrastiveLoss:Siamese双生猫中提出的损失,用于人脸识别中,deepid2中也有使用
layer {
name: "loss"
type: "ContrastiveLoss"
bottom: "feat"
bottom: "feat_p"
bottom: "sim"
top: "loss"
contrastive_loss_param {
margin: 1
}
}
TripletLoss:FaceNet中提出的三元组,用于人脸识别
CenterLoss:
caffeFace提出的损失,用于人脸识别,起到增大类间距离,减少类类距离
layer {
name: "center_loss"
type: "CenterLoss"
bottom: "fc5"
bottom: "label"
top: "center_loss"
param {
lr_mult: 1
decay_mult: 2
}
center_loss_param {
num_output: 10572
center_filler {
type: "xavier"
}
}
loss_weight: 0.008
}
池化层参数:
Pooling:池化层
pool:池化方法,默认为MAX。目前可用的方法有 MAX, AVE,STOCHASTIC
kernel_size:池化的核大小
stride:池化的步长
准确率层参数:
Accuracy:分类准确率层,只在test阶段有效,输入blob为的ip和label(2个bottom),输出blob为accuracy(1个top)
可选参数,top_k表示前几正确率
accuracy_param {
top_k: 5
}
caffe参数详解的更多相关文章
- Nginx主配置参数详解,Nginx配置网站
1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...
- iptables参数详解
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
- chattr的常用参数详解
chattr的常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际生产环境中,有的运维工程师不得不和开发和测试打交道,在我们公司最常见的就是部署接口.每天每个人部署的 ...
- mha配置参数详解
mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...
- $.ajax()方法所有参数详解;$.get(),$.post(),$.getJSON(),$.ajax()详解
[一]$.ajax()所有参数详解 url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注 ...
- linux PHP 编译安装参数详解
linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...
- 【转】jqGrid 各种参数 详解
[原文]http://www.cnblogs.com/younggun/archive/2012/08/27/2657922.htmljqGrid 各种参数 详解 JQGrid JQGrid是一个 ...
- HTML滚动字幕代码参数详解及Js间隔滚动代码
html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...
- mysql5.6主从参数详解
mysql5.6的主从相当的不错,增加了不少参数,提升了主从同步的安全和效率,以下是mysql5.6主从参数详解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
随机推荐
- AngularJS的ng-class示例
程序下载:https://files.cnblogs.com/files/xiandedanteng/angularJSRender.rar 代码: <!DOCTYPE HTML PUBLIC ...
- 微信授权网页登陆,oauth
1.在微信公众号请求用户网页授权之前.开发人员须要先到公众平台官网中的开发人员中心页配置授权回调域名.请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头. 2.授 ...
- 简学lingo(四)——实例篇
本片将会接着上篇实例来写,如要參照能够看下上篇的http://blog.csdn.net/yzu_120702117/article/details/38453791 如有句法上的问题能够參照我之前总 ...
- js 宽和高
网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offs ...
- LeetCode85 Maximal Rectangle java题解
public static int maximalRectangle(char[][] matrix) { int rowNum=matrix.length; if(rowNum==0) return ...
- substr使用注意
substr使用时要判断起点和长度是否超过了串本身的长度,否则会抛异常
- 笔记04 WPF对象引用
转自:http://www.fx114.net/qa-261-90254.aspx 我们应该都知道,XAML是一种声明式语言,XAML的标签声明的就是对象.一个XAML标签会对应着一个对象,这个对象一 ...
- POJ 2480 Longge's problem 积性函数
题目来源:id=2480" style="color:rgb(106,57,6); text-decoration:none">POJ 2480 Longge's ...
- 服务管理-Apache
WEB服务器介绍 web server 有两个意思: 一台负责提供网页的服务器,通过HTTP协议传给客户端(一般是指网页浏览器). 一个提供网页的服务器程序. 常见的WEB服务器 Apache是世界使 ...
- PS 魔法棒
魔术棒工具是通过选取图像中颜色相近或大面积单色区域的像素来制作选区,魔术棒用于纯色背景中较多. 容差数值越大,选择出的选区就越大,容差越小,对颜色差别的要求也就越严格,选择出的选区也就越小 按住shi ...