官网 tutorial:http://caffe.berkeleyvision.org/tutorial/
官网 layer 解析:http://caffe.berkeleyvision.org/tutorial/layers.html
参考该博主的caffe学习系列,写得很详细,超赞的:https://www.cnblogs.com/denny402/tag/caffe/
一、数据层
提供其它格式转换为Blobs输入,也提供数据从Blobs转换成别的格式保存输出
- 数据来源
- 高效的数据库的 LevelDB 和 LMDB
- 直接来自于内存
- 来自磁盘的 hdf5 文件和图片格式文件
1 | layer { |
(1)top、bottom: 用bottom来输入数据,用top来输出数据,只有top没有bottom,则只有输出,没有输入
(2)data、label: 在数据层,(data,label)是分类模型所必需的
(3)transform_param:数据预处理
(4)data_param:不同数据来源,这里只考虑数据来源于数据库 backend: LMDB
二、视觉层
1.卷积层 type: “Convolution”
1 | layer { |
(1)param
- lr_mult: 学习率的系数,最终的学习率是 lr_mult*base_lr
如果有两个lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率,一般偏置项的学习率是权值学习率的 两倍
(2)convolution_param:
- num_output: 卷积核的个数,fearure map的个数
- kernel_size: 卷积核的大小,也可以用kernel_h和kernel_w设定
- stride: 卷积核的步长,也可以用stride_h和stride_w来设定
- pad: 扩充边缘,默认为0,不扩充,扩充的时候是左右、上下对称的,也可以通过pad_h和pad_w来设定(注意,扩充是对图像边缘,而不是卷积核)
- weight_filler: 权值初始化,默认为“constant”,全为0,一般用”xavier”或”gaussian”
- bias_filler: 偏置项初始化,一般设置为”constant”,全为0
- bias_term: 是否开启偏置项,默认为true, 开启
- group: 分组卷积,默认为1组(减少运算量,但groups之间不share feature map)
输入输出尺寸计算
输入:nc0w0h0
输出:nc1w1h1(c1就是num_output)
w1=(w0+2pad-kernel_size)/stride+1;
h1=(h0+2pad-kernel_size)/stride+1;
(如果设置stride为1,pad=(kernel_size-1)/2,则宽度和高度不变)
2.池化层 type: “Pooling”
与卷积层相同
- pool: 池化方法,有MAX、AVE、TOCHASTIC
3.LRN type: LRN
Local Response Normalization局部响应归一化,侧抑制,在通道方向上
4.im2col
将矩阵重叠划分为多个子矩阵,将其序列化为向量
在caffe中,卷积计算就是先进行im2col,再进行内积计算
三、激活层
1.Sigmoid
2.ReLU
3.TanH
4.AbsVal: 绝对值
5.Power: 幂运算
四、其它层
1.softmax-loss层 type: “SoftmaxWithLoss”
2.softmax type: “Softmax”
3.全连接层 type: “InnerProduct”
4.精确度 type: “Accuracy”
预测精确度,只有test阶段才有,因此需要加入include参数
1 | layer { |
5.reshape type: “Reshape”
改变维度
6.Dropout
设置dropout_ratio