转载自: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文件,包含datalabel两个变量,数据类型是caffe支持的float型数据
h5create('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_multdecay_multweight_filterbias_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参数详解的更多相关文章

  1. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  2. iptables参数详解

    iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...

  3. chattr的常用参数详解

    chattr的常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际生产环境中,有的运维工程师不得不和开发和测试打交道,在我们公司最常见的就是部署接口.每天每个人部署的 ...

  4. mha配置参数详解

    mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...

  5. $.ajax()方法所有参数详解;$.get(),$.post(),$.getJSON(),$.ajax()详解

    [一]$.ajax()所有参数详解 url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注 ...

  6. linux PHP 编译安装参数详解

    linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

  7. 【转】jqGrid 各种参数 详解

      [原文]http://www.cnblogs.com/younggun/archive/2012/08/27/2657922.htmljqGrid 各种参数 详解 JQGrid JQGrid是一个 ...

  8. HTML滚动字幕代码参数详解及Js间隔滚动代码

    html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...

  9. mysql5.6主从参数详解

    mysql5.6的主从相当的不错,增加了不少参数,提升了主从同步的安全和效率,以下是mysql5.6主从参数详解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

随机推荐

  1. 转: linux下的自动对时

    转自: http://www.cnblogs.com/vimmer/archive/2012/05/17/2505785.html 评注:date 命令格式为: date -s 2012-08-02 ...

  2. Git 常用场景操作

    git init      在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.   git clone      获取一个u ...

  3. pyquery库的使用

    pyquery标签选择 获取了所有的img标签(css选择器,你也可以换成不同的class和id) import requests import re from pyquery import PyQu ...

  4. 百科知识 ass文件如何打开

    直接拖入视频即可播放 鼠标右键 用记事本打开 也有一些软件支持比如POPSUB(也比较方便调整时间轴) 如果你是说如何加载字幕的话 用VOBSUB是最好的... ASS是视频的字幕,和视频放在同一文件 ...

  5. css3 - 基本选择器

    有人说类选择器最好不要超过三层,其实我也是这样认为的,不是吗? 选择器分为四大类 标签.全选(相对于子类继承了0.1).类.ID 权值分别是:1->0.1->10->100(权值可叠 ...

  6. Ffmpeg 获取USB Camera 视频流

    本文讲述的案例是如何通过Ffmpeg实现从USB Camera中获取视频流并将视频流保存到MP4文件. 本文亦适用于从USB Camera 获取视频流并将视频流转发到rtmp服务的案例,二者基本的原理 ...

  7. 如何将安卓手机中已安装的应用导出一个apk安装包

    首先安装ES文件浏览器 然后应用里找到你要导出apk的应用,长按应用,备份应用, 然后在upbacks/apps文件夹里找吧 不得不说 ES浏览器还是屌啊

  8. OpenCV load 运行出错 cv::Exception 出错

    今天在使用OpenCV的load函数时,出现错误,代码如下: cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); ...

  9. Java、C++、Python、Ruby、PHP、C#和JavaScript的理解

    Java.C++.Python.Ruby.PHP.C#和JavaScript和日本动漫里的那些大家熟悉的动漫人物结合起来.依据他们的身世.个人经历来生动的表达各编程语言的发展历程.原文内容例如以下:  ...

  10. SPOJ - LCS 后缀自动机入门

    LCS - Longest Common Substring A string is finite sequence of characters over a non-empty finite set ...