深度学习caffe框架

正文共2500张图,13张图,预计阅读时间13分钟。

caffe的代码层次

首先让我们回顾一下caffe的代码层次: blob,layer, net和solver.

其中blob是数据结构, layer是网络的层, net是将layer搭建成的网络,solver是网络BP时候的求解算法. 本节主要介绍caffe的layer基本结构, 种类, 以及不同类型的layer如何定义.

layer的基本结构和种类

Caffe的layer的基本结构:

从一个典型的卷积神经网络模型结构出发, 首先需要数据输入层,然后是图像的预处理,例如图像切割slice, 卷积层Convolution, 在caffe中,激活函数等数据运算也用layer的方式定义. 总的来说,caffe的layer种类如下:

数据输入层:

视觉层(Vision Layers): 包括Convolution, Pooling, Local Response Normalization (LRN), im2col等

损失层: softmax-loss层, Euclidean层.

循环层: RNN, LSTM层等.

工具层(Utility layer): 例如reshape层, concat层等

普通层(Common layer): dropout层, 全连接层, embed层.

数据输入层

一个常见的数据输入层定义如下. 输入数据定义为lmdb数据库格式.

详细的数据数据层定义见:http://www.cnblogs.com/denny402/p/5070928.html

视觉层

视觉层包括Convolution, Pooling, Local Response Normalization (LRN), im2col等层

卷积层

卷积层是卷积神经网络的核心层. 卷积层的定义:

lr_mult: 学习率的系数,最终的学习率是这个数乘以solver.prototxt配置文件中的base_lr。如果有两个lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率。一般偏置项的学习率是权值学习率的两倍。

pad: 进行边缘扩充。默认为0, 也就是不扩充。 扩充的时候是左右、上下对称的,比如卷积核的大小为5*5,那么pad设置为2,则四个边缘都扩充2个像素,即宽度和高度都扩充了4个像素,保证在卷积运算之后的特征图就不会变小。也可以通过pad_h和pad_w来分别设定。

输入:n*c0*w0*h0

输出:n*c1*w1*h1

其中,c1就是参数中的num_output,生成的特征图个数

w1=(w0+2*pad-kernel_size)/stride+1;

h1=(h0+2*pad-kernel_size)/stride+1;

如果设置stride为1,前后两次卷积部分存在重叠。如果设置pad=(kernel_size-1)/2,则运算后,宽度和高度不变.

池化层

池化层有效减少了网络参数, 同时尽可能保持了位置信息.

这里pad还是默认为0,不进行扩充。

输入:n*c*w0*h0

输出:n*c*w1*h1

和卷积层的区别就是其中的c保持不变

w1=(w0+2*pad-kernel_size)/stride+1;

h1=(h0+2*pad-kernel_size)/stride+1;

如果设置stride为2,前后两次卷积部分不重叠。100*100的特征图池化后,变成50*50.

3.局部响应归一化层(Local Response Normalization, LRN)

对于每一个输入, 去除以

得到归一化后的输出。

4.Im2col层.

将输入的image的各个区域(小矩阵)拉成向量,然后依次排列形成新的大矩阵.

在caffe中,卷积运算就是先对数据进行im2col操作,再进行内积运算(inner product)。这样做,比原始的卷积操作速度更快。

LRN和im2col层的详细情况见:http://www.cnblogs.com/denny402/p/5071126.html

激活层

在激活层,是对输入做元素级的激活操作(函数变换), 输入和输出的维度是一致的.常用的激活函数有sigmoid, relu和tanh等.

典型的激活层定义:

以ReLU层为例, 非线性变化层 max(0,x),一般与CONVOLUTION层成对出现

其他层

全连接层

weight_filler: 权值初始化。 默认为“constant",值全为0,很多时候我们用"xavier"算法来进行初始化,也可以设置为”gaussian"

bias_filler: 偏置项的初始化。一般设置为"constant",值全为0。

bias_term: 是否开启偏置项,默认为true, 开启

全连接层的定义为:

Dropout层

防止过拟合.只需要定义dropout比率就可以了.

Dropout层

softmax-loss层

如果我们最终目的就是得到各个类别的概率似然值,这个时候就只需要一个 Softmax层,而不一定要进行softmax-Loss 操作;如果输出结果理论上的概率分布已知,然后要做最大似然估计,此时最后需要一个softmax-Loss层.

从Softmax-loss的计算公式可以看出, softmax-loss实际上定义的是交叉熵:

softmax-loss层的定义:

Softmax和softmax-loss的比较:http://freemind.pluskid.org/machine-learning/softmax-vs-softmax-loss-numerical-stability/

还有如reshape层等,参考:caffe官网: http://caffe.berkeleyvision.org/tutorial/layers.html

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180802A1EUHR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券