caffe 所具有的层结构,都有那些层1

caffe更新后,又新加了一些层,有时候想写一个网络,但是,如果你连caffe一共都有哪些层都不清楚,也不大合 适,对吧,向咱们这种低水平的小盆友,添加新层太麻烦,水平不到,所以只能把当下的层结构弄清楚了~
这里主要参考http://www.myexception.cn/other/1828071.html这个网址,再加上我自己的一些理解,以及一些新层的说明,闲话少说,咱这就开始!


**1 vision layer**
--------------------
**1.1 convolution 卷基层**
类型:"Convolution"(但凡是CNN,就不可能少了卷基层)
 例子
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
lr_mult: 学习率(base_lr)的系数,最终的学习率是这个数乘以solver.prototxt配置文件中的base_lr(base_lr)。如果有两个lr_mult, 则第一个表示权值的学习率,第二个表示偏置项的学习率。一般偏置项的学习率是权值学习率的两倍。
学习率(base_lr)应该是梯度运算时表示每次向中心点跳跃的幅度。太大了有可能跳错地方,太小了又会进度缓慢。刚开始训练时会设置在比较大的值,目的是能快速向正确的方向移动,然后学习率递减(weight_decay),目的是减少错误保证精确性。
卷积层的重要参数
必须参数:
num_output (c_o):过滤器的个数
kernel_size (or kernel_h and kernel_w):过滤器的大小
可选参数:
weight_filler: 权值初始化。 默认为“constant",值全为0,很多时候我们用"xavier"算法来进行初始化,也可以设置为”gaussian"
bias_filler: 偏置项的初始化。一般设置为"constant",值全为0bias_term: 是否开启偏置项,默认为true, 开启
group: (这个不用看,现在基本上用不到),分组,默认为1组。如果大于1,我们限制卷积的连接操作在一个子集内。如果我们根据图像的通道来分组,那么第i个输出分组只能与第i个输入分组进行连接。
stride (or stride_h and stride_w) [default 1]:指定过滤器的步长
通过卷积后的大小变化:
输入:n * c_i * h_i * w_i
输出:n * c_o * h_o * w_o,其中h_o = (h_i + 2 * pad_h - kernel_h) /stride_h + 1,w_o通过同样的方法计算。

**1.2 pooling池化层**
类型:"Pooling"(下采样,为了减少运算量和减小数据维度,比较简单)
例
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}
kernel_size: 池化的核大小。也可以用kernel_h和kernel_w分别设定。
其它参数:
pool: 池化方法,默认为MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC(MAX指的是求最大的,AVE就是求均值,STOCHASTIC就是通过概率的方法计算,可以看这个网页http://www.cnblogs.com/tornadomeet/p/3432093.html)
pad: 和卷积层的pad的一样,进行边缘扩充。默认为0
stride: 池化的步长,默认为1。一般我们设置为2,即不重叠。也可以用stride_h和stride_w来设置。
通过池化后的大小变化:
输入:n * c_i * h_i * w_i
输出:n * c_o * h_o * w_o,其中h_o = (h_i + 2 * pad_h - kernel_h) /stride_h + 1,w_o通过同样的方法计算。

**1.3 LRN(local response  normalization) 局部响应正则化层**
类型: "LRN"(对输入进行局部归一化,达到“侧抑制”,AlexNet里面就用到了)
例
layers {
  name: "norm1"
  type: LRN
  bottom: "pool1"
  top: "norm1"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}
local_size: 默认为5。如果是跨通道LRN,则表示求和的通道数;如果是在通道内LRN,则表示求和的正方形区域长度。
alpha: 默认为1,归一化公式中的参数。
beta: 默认为5,归一化公式中的参数。
norm_region: 默认为ACROSS_CHANNELS。有两个选择,ACROSS_CHANNELS表示在相邻的通道间求和归一化。WITHIN_CHANNEL表示在一个通道内部特定的区域内进行求和归一化。与前面的local_size参数对应。
归一化公式:对于每一个输入, 去除以![这里写图片描述](http://img.blog.csdn.net/20160510113637470),得到归一化后的输出

**1.4 im2col**
可能是我看的少,没发现哪个网络用这个层的,但是,这个算法caffe里经常用到,是将图片转化为矩阵,这里贴一个知乎网址,大家可以看看,讲这个的,说的很好
https://www.zhihu.com/question/28385679

**

2 loss layers
----

**
深度学习,主要是通过最小化损失函数来进行优化的
贴两个网址,人家都总结好了,而且写的也挺好,根据算法原理,在加上源代码,相互验证理解,极好~
http://www.ithao123.cn/content-8127352.html
http://blog.csdn.net/u014114990/article/details/47802993

先写到这,我还得弄别的,剩下的层,下篇或者下下篇就会有








你可能感兴趣的:(caffe 所具有的层结构,都有那些层1)