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』卷积层、池化层详解
一.前向计算和反向传播数学过程讲解
随机推荐
- ODB 短板
首先是不支持联合主键,而且没有CHECK约束.UNIQUE约束,这是官方都承认的. 虽然提供了延迟加载(lazyload)来改善效率,不过使用起来不方便 查询不灵活,只能在WHERE之后的部分设定查询 ...
- 动作之CCActionInstant(立即动作)家族
立即动作就是不需要时间,马上就完成的动作.立即动作的共同基类是CCActionInstant.CCActionInstant的常用子类有: CCCallFunc:回调函数包装器 CCFlipX:X轴翻 ...
- 常用工具之zabbix
简介 zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网 络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制 ...
- 关于js原型的面试题
今天遇到关于javascript原型的一道面试题,现分析下: 原题如下: function A(){ } function B(a){ this.a = a; } function C(a){ if( ...
- css图片垂直居中
css图片垂直居中一.style代码 .case-pic{ height: 125px; position: relative; text-align: center } .case-pic span ...
- kickstart安装
1.生成ks.cfg 文件 安装Kickstart # yum install system-config-kickstart 8.2 在桌面环境下配置Kickstart 启动X Windows 环境 ...
- 通过配置tomcat虚拟路径配置站点的静态资源
我们常常站点中会提供给用户上传文件.图片.视频或者诸如为了提高性能生成的静态文件等存储在站点应用中.但如果静态资源文件和项目文件在同一个目录下,当我们重新部署文件时,war重新解压会导致静态资源文件的 ...
- js中的"=="与"==="的区别
"==": 1,如果两表达式的类型不同,则试图将它们转换为字符串.数字或 Boolean 量. 2,NaN 与包括其本身在内的任何值都不相等. 3,负零等于正零. 4,null 与 ...
- 关于dialog引起的 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView not attached to window manager 错误的分析
在跑Monkey测试的时候出现了一个比较特别的问题,先来看看Log: // CRASH: com.meizu.media.painter (pid 12491) // Short Msg: java. ...
- ns2出现Client: Handoff Attempt的情况解决
找到mac/mac-802_11.cc,这是系统本身一个bug,对于adhoc网络无需进行切换尝试. > if (*rcount == 3 && handoff == 0) {& ...