caffe之(一)卷积层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层、卷积操作层、pooling层、非线性变换层、内积运算层、归一化层、损失计算层等;本篇主要介绍卷积层
1. 卷积层总述
下面首先给出卷积层的结构设置的一个小例子(定义在.prototxt文件中)
layer {
name: "conv1" // 该层的名字
type: "Convolution" // 该层的类型,具体地,可选的类型有:Convolution、
bottom: "data" // 该层的输入数据Blob的名字
top: "conv1" // 该层的输出数据Blob的名字
// 该层的权值和偏置相关参数
param {
lr_mult: //weight的学习率
}
param {
lr_mult: // bias的学习率
}
// 该层(卷积层)的卷积运算相关的参数
convolution_param {
num_output:
kernel_size:
stride:
weight_filler {
type: "xavier" // weights初始化方法
}
bias_filler {
type: "constant" // bias初始化方法
}
}
}
注:在caffe的原始proto文件中,关于卷积层的参数ConvolutionPraram定义如下:
message ConvolutionParameter {
optional uint32 num_output = ; // The number of outputs for the layer
optional bool bias_term = [default = true]; // whether to have bias terms
// Pad, kernel size, and stride are all given as a single value for equal dimensions in all spatial dimensions, or once per spatial dimension.
repeated uint32 pad = ; // The padding size; defaults to 0
repeated uint32 kernel_size = ; // The kernel size
repeated uint32 stride = ; // The stride; defaults to 1
// Factor used to dilate the kernel, (implicitly) zero-filling the resulting holes. (Kernel dilation is sometimes referred to by its use in the algorithme à trous from Holschneider et al. 1987.)
repeated uint32 dilation = ; // The dilation; defaults to 1
// For 2D convolution only, the *_h and *_w versions may also be used to specify both spatial dimensions.
optional uint32 pad_h = [default = ]; // The padding height (2D only)
optional uint32 pad_w = [default = ]; // The padding width (2D only)
optional uint32 kernel_h = ; // The kernel height (2D only)
optional uint32 kernel_w = ; // The kernel width (2D only)
optional uint32 stride_h = ; // The stride height (2D only)
optional uint32 stride_w = ; // The stride width (2D only)
optional uint32 group = [default = ]; // The group size for group conv
optional FillerParameter weight_filler = ; // The filler for the weight
optional FillerParameter bias_filler = ; // The filler for the bias
enum Engine {
DEFAULT = ;
CAFFE = ;
CUDNN = ;
}
optional Engine engine = [default = DEFAULT];
// The axis to interpret as "channels" when performing convolution.
// Preceding dimensions are treated as independent inputs;
// succeeding dimensions are treated as "spatial".
// With (N, C, H, W) inputs, and axis == 1 (the default), we perform
// N independent 2D convolutions, sliding C-channel (or (C/g)-channels, for
// groups g>1) filters across the spatial axes (H, W) of the input.
// With (N, C, D, H, W) inputs, and axis == 1, we perform
// N independent 3D convolutions, sliding (C/g)-channels
// filters across the spatial axes (D, H, W) of the input.
optional int32 axis = [default = ];
// Whether to force use of the general ND convolution, even if a specific
// implementation for blobs of the appropriate number of spatial dimensions
// is available. (Currently, there is only a 2D-specific convolution
// implementation; for input blobs with num_axes != 2, this option is
// ignored and the ND implementation will be used.)
optional bool force_nd_im2col = [default = false];
}
2. 卷积层相关参数
接下来,分别对卷积层的相关参数进行说明
(根据卷积层的定义,它的学习参数应该为filter的取值和bias的取值,其他的相关参数都为hyper-paramers,在定义模型时是要给出的)
lr_mult:学习率系数
放置在param{}中
该系数用来控制学习率,在进行训练过程中,该层参数以该系数乘solver.prototxt配置文件中的base_lr的值为学习率
即学习率=lr_mult*base_lr
如果该层在结构配置文件中有两个lr_mult,则第一个表示fitler的权值学习率系数,第二个表示偏执项的学习率系数(一般情况下,偏执项的学习率系数是权值学习率系数的两倍)
convolution_praram:卷积层的其他参数
放置在convoluytion_param{}中
该部分对卷积层的其他参数进行设置,有些参数为必须设置,有些参数为可选(因为可以直接使用默认值)
必须设置的参数
num_output:该卷积层的filter个数
- kernel_size:卷积层的filter的大小(直接用该参数时,是filter的长宽相等,2D情况时,也可以设置为不能,此时,利用kernel_h和kernel_w两个参数设定)
其他可选的设置参数
stride:filter的步长,默认值为1
- pad:是否对输入的image进行padding,默认值为0,即不填充(注意,进行padding可能会带来一些无用信息,输入image较小时,似乎不太合适)
- weight_filter:权值初始化方法,使用方法如下
weight_filter{
type:"xavier" //这里的xavier是一冲初始化算法,也可以是“gaussian”;默认值为“constant”,即全部为0
} - bias_filter:偏执项初始化方法
bias_filter{
type:"xavier" //这里的xavier是一冲初始化算法,也可以是“gaussian”;默认值为“constant”,即全部为0
} - bias_term:是否使用偏执项,默认值为Ture
caffe之(一)卷积层的更多相关文章
- caffe源码 卷积层
通俗易懂理解卷积 图示理解神经网络的卷积 input: 3 * 5 * 5 (c * h * w) pading: 1 步长: 2 卷积核: 2 * 3 * 3 * 3 ( n * c * k * k ...
- caffe中全卷积层和全连接层训练参数如何确定
今天来仔细讲一下卷基层和全连接层训练参数个数如何确定的问题.我们以Mnist为例,首先贴出网络配置文件: name: "LeNet" layer { name: "mni ...
- TensorFlow与caffe中卷积层feature map大小计算
刚刚接触Tensorflow,由于是做图像处理,因此接触比较多的还是卷及神经网络,其中会涉及到在经过卷积层或者pooling层之后,图像Feature map的大小计算,之前一直以为是与caffe相同 ...
- caffe Python API 之卷积层(Convolution)
1.Convolution层: 就是卷积层,是卷积神经网络(CNN)的核心层. 层类型:Convolution lr_mult: 学习率的系数,最终的学习率是这个数乘以solver.prototxt配 ...
- 【caffe】卷积层代码解析
1.Forward_cpu conv_layer.cpp template <typename Dtype> void ConvolutionLayer<Dtype>::For ...
- caffe中卷积层和pooling层计算下一层的特征map的大小
pool层,其中ceil是向上取整函数 卷积层:
- caffe之(二)pooling层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
- 卷积层和BN层融合
常规的神经网络连接结构如下  当网络训练完成, 在推导的时候为了加速运算, 通常将卷积层和 batch-norm 层融合, 原理如下 \[ \begin{align*} y_{conv} & ...
- 『TensorFlow』卷积层、池化层详解
一.前向计算和反向传播数学过程讲解
随机推荐
- Top 10 questions about Java Collections--reference
reference from:http://www.programcreek.com/2013/09/top-10-questions-for-java-collections/ The follow ...
- sudo 免密码
转自:sudo 免密码 很多都是修改/etc/sudoers权限为740再加上一句 ALL=NOPASSWD:ALL 或者加一句 yourname ALL=(ALL) NOPASSWD: ALL 然后 ...
- java class 文件解析
参考下面两个文章对一个class文件进行解析: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.6 htt ...
- 获取java项目 classpath目录
this.getClass().getResource("/").getPath(); 从根目录获取载入文件: this.getClass().getResourceAsStrea ...
- MYSQL小常识
在mysql里面利用str_to_date()把字符串转换为日期 此处以表T_TGS_ALARMED的BJSJ为例,查询当前时间在此范围之内的数据. insert into T_TGS_ALARMED ...
- 深入理解计算机系统第二版习题解答CSAPP 2.7
下面的函数将输出什么结果? const char *s = "abcdef"; show_bytes((byte_pointer) s, strlen(s)); 其中字母'a'~' ...
- mysql2csv 和 csv2mysql 工具
mysql2csv 和 csv2mysql 工具 在这里提供了两个使用 .csv 格式 的简单的 MySQL 数据库的导数据工具.csv 格式可以很容易地生成和解析,而且,也可以很容易地使用办公软件把 ...
- 移动端布局Demo展示图文
上两张图自勉一下(来自刘墉先生的文章,最近看他的作品):然后移动端该愈来愈受到重视,未来的市场我不知道,不过我知道手机的功能越来越强大是不争的事实!移动端布局的积累也需要从现在做起! 需求一:实现下图 ...
- 20151210jquery进阶 代码备份
$(function () { /*$('form input[type=button]').click(function() { $.ajax({ type:'POST', //url:'http: ...
- ios8地图开发的报错
报错如下:Trying to start MapKit location updates without prompting for location authorization. Must call ...