CNN各个层的介绍
来源:互联网 发布:odis工程师刷低层数据 编辑:程序博客网 时间:2024/06/05 15:54
caffe笔记之例程学习(三)
原文链接:caffe.berkeleyvision.org/tutorial/layers.html
创建caffe模型,首先要在protocol buffer 定义文件(prototxt)中定义结构。
在caffe环境中,图像的明显特征是其空间结构。
主要layers
主要功能
主要类型
其他
卷积层
提取特征
CONVOLUTION
学习率、数据维度
池化层
特征池化
POOLING
池化方法,数据维度
局部响应归一化层
临近抑制
LRN
损失计算层
loss计算
SOFTMAX_LOSS
EUCLIDEAN_LOSS
HINGE_LOSS
ACCURACY正确率
选择合适的loss
范数可选
激励层
非线性函数
ReLU
SIGMOID
TANH
ABSVAL
POWER
BNLL
ReLU收敛更快
数据层
数据源
Level-DB
LMDB
HDF5_DATA
HDF5_OUTPUT
IMAGE_DATA
Level-DB和LMDB更加高效
一般层
INNER_PRODUCT 全连接层
SPLIT
FLATTEN 类似shape方法
CONCAT
ARGMAX
MVN
一、卷积层 Convolution:
Documents:注意维度变化与参数选择
1 Parameters (ConvolutionParameter convolution_param) 2 3 Required 4 num_output (c_o): 输出数(filter数) 5 kernel_size (or kernel_h and kernel_w): 指定卷积核 6 7 Strongly Recommended 8 weight_filler [default type: 'constant' value: 0] 9 10 Optional11 bias_term [default true]: 指定是否提供偏置10 12 pad (or pad_h and pad_w) [default 0]: 指定输入图片的两侧像素填充量13 stride (or stride_h and stride_w) [default 1]: 过滤器步长14 group (g) [default 1]: 如果 g > 1, 我们限制每一个filter之间的连通性 对于输入的子集. 指定输入和输出被分为 g 组,第i输出组只会和第i输入组相连接.15 16 Input17 18 n * c_i * h_i * w_i19 20 Output21 22 n * c_o * h_o * w_o, where h_o = (h_i + 2 * pad_h - kernel_h) / stride_h + 1 and w_o likewise.
example:
1 layers { 2 name: "conv1" 3 type: CONVOLUTION 4 bottom: "data" 5 top: "conv1" 6 blobs_lr: 1 # learning rate multiplier for the filters 7 blobs_lr: 2 # learning rate multiplier for the biases 8 weight_decay: 1 # weight decay multiplier for the filters 9 weight_decay: 0 # weight decay multiplier for the biases10 convolution_param {11 num_output: 96 # learn 96 filters12 kernel_size: 11 # each filter is 11x1113 stride: 4 # step 4 pixels between each filter application14 weight_filler {15 type: "gaussian" # initialize the filters from a Gaussian16 std: 0.01 # distribution with stdev 0.01 (default mean: 0)17 }18 bias_filler {19 type: "constant" # initialize the biases to zero (0)20 value: 021 }22 }23 }
二、池化层 Pooling:
参考链接 deeplearning.stanford.edu/wiki/index.php/池化
池化: 概述
在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) * (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 * 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。
为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在 另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平 均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。
参数解释:
1 Required 2 kernel_size (or kernel_h and kernel_w):池化核 3 Optional 4 pool [default MAX]:指定池化方法. MAX, AVE, or STOCHASTIC(按照概率值大小随机选择,数值大的被选中的概率大) 5 pad (or pad_h and pad_w) [default 0]: 指定输入图片的两侧像素填充量 6 stride (or stride_h and stride_w) [default 1]:过滤器步长 7 Input 8 n * c * h_i * w_i 9 Output10 n * c * h_o * w_o,where h_o = (h_i + 2 * pad_h - kernel_h) / stride_h + 1 and w_o likewise..
示例:
1 layers { 2 name: "pool1" 3 type: POOLING 4 bottom: "conv1" 5 top: "pool1" 6 pooling_param { 7 pool: MAX 8 kernel_size: 3 # 3*3 区域池化 9 stride: 2 # (in the bottom blob) between pooling regions10 }11 }
- CNN各个层的介绍
- 各个层的协议
- ad15 各个层的含义
- CNN 简单介绍的链接
- CNN中pooling层的作用
- caffe(12) CNN各层的理解
- CNN—pooling层的作用
- CNN框架的搭建及各个参数的调节
- 如何得到卷积层输出的深度--CNN卷积层
- OpenCV的各个模块介绍
- 各个特殊类的介绍
- Ubuntu各个版本的介绍
- cnn介绍
- CNN介绍
- PCB板各个层的含义
- 加入多态后的各个层转换
- 5各个层的Context.xml文件
- caffe提取网络各个层的特征
- 移植ubuntu14.04根文件系统至beaglebone开发板探索
- 1216: 找零钱
- Android开发中Handler的经典总结
- 文章标题
- php 创建一个扩展开发环境的正确姿势
- CNN各个层的介绍
- 获取ip地址
- .net 经常抛出OutOfMemoryException 服务器环境问题
- Linux kernel轮询与等待队列
- application/json 和 application/x-www-form-urlencoded的区别
- c++:explicit 抑制构造函数隐式转换
- 量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python)
- QT中UDPSocket丢包问题(续)
- OpenDaylight开发----建立odlops工程(二)