caffe一些功能的layer

来源:互联网 发布:断开网络驱动器 编辑:程序博客网 时间:2024/06/01 22:49

一些功能的layer:

splitting(把一个输入分成多个输出),类型:Split

在caffe.proto里为什么没有找到呢.它的作用就是把一个输入复制为多个输入;

 

Flattening:类型为:Flatten

偏平的意思,如 flattens an input of shape n * c * h * w to a simple vector output of shape n * (c*h*w))。

 

Reshape:(重新调整维度),类型为:Reshape

在不改变数据的情况下,改变输入的维度。

层类型:Reshape

先来看例子

复制代码
layer {      name: "reshape"      type: "Reshape"      bottom: "input"      top: "output"      reshape_param {        shape {          dim: 0  # copy the dimension from below          dim: 2          dim: 3          dim: -1 # infer it from the other dimensions        }      }    }  
复制代码

有一个可选的参数组shape,用于指定blob数据的各维的值(bolb是一个四维的数据:n*c*w*h)。

dim:0  表示维度不变,即输入和输出是相同的维度。

dim:2 或 dim:3 将原来的维度变成2或3

dim:-1 表示由系统自动计算维度。数据的总量不变,系统会根据blob数据的其它三维来自动计算当前维的维度值 。

假设原数据为:64*3*28*28, 表示64张3通道的28*28的彩色图片

经过reshape变换:

复制代码
reshape_param {        shape {          dim: 0           dim: 0          dim: 14          dim: -1         }      }  
复制代码

输出数据为:64*3*14*56,系统自己算的。blob里面的数据量不变,知道三个维度,另外一个就知道了


Cocatenation(把多个输入可以串联起来):类型为:Concat

Slicing(可以对输入进行切片)类型为:Slice: 

Slice layer 的作用是将bottom按照需要分解成多个tops。(与split layer的不一样在于spliit的作用是将bottom复制多份,输出到tops)
首先我们先看一下slice layer 在prototxt里面的书写

layer {  name: "slice"  type: "Slice"  bottom: "input"  top: "output1"  top: "output2"  top: "output3"  top: "output4"  slice_param {    axis: 1    slice_point: 1    slice_point: 3    slice_point: 4  }}

这里假设input的维度是N*5*H*W,tops输出的维度分别为N*1*H*W N*2*H*WN*1*H*WN*1*H*W
这里需要注意的是,如果有slice_point,slice_point的个数一定要等于top的个数减一。
axis表示要进行分解的维度。
slice_point的作用是将axis按照slic_point 进行分解。
slice_point没有设置的时候则对axis进行均匀分解。


另外还有:Elementwise Operations(类型为Eltwise), Argmax(类型为ArgMax), Softmax(类型为Softmax),

Mean-Variance Normalization(类型为MVN)

Dropout

Dropout是一个防止过拟合的trick。可以随机让网络某些隐含层节点的权重不工作。

先看例子:

复制代码
layer {    name: "drop7"    type: "Dropout"    bottom: "fc7-conv"    top: "fc7-conv"    dropout_param {      dropout_ratio: 0.5    }  }layer {    name: "drop7"    type: "Dropout"    bottom: "fc7-conv"    top: "fc7-conv"    dropout_param {      dropout_ratio: 0.5    }  }  
复制代码

只需要设置一个dropout_ratio就可以了。



slice:在某一个维度,按照给定的下标,blob拆分成几块。比如要拆分channel,总数50,下标为10,20,30,40,那就是分成5份,每份10个channel,输出5个layer。

concat:在某个维度,将输入的layer组合起来,是slice的逆过程。

split:将blob复制几份,分别给不同的layer,这些上层layer共享这个blob。

tile:将blob的某个维度,扩大n倍。比如原来是1234,扩大两倍变成11223344。

reduction:将某个维度缩减至1维,方法可以是sum、mean、asum、sumsq。

reshape:这个很简单,就是matlab里的reshape。

eltwise:将几个同样大小的layer,合并为1个,合并方法可以是相加、相乘、取最大。

flatten:将中间某几维合并,其实可以用reshape代替。



原创粉丝点击