caffe Layers及参数

1、Convolution层:

层类型:Convolution
参数:
lr_mult: 学习率系数,最终的学习率 = lr_mult *base_lr,如果存在两个则第二个为偏置项的学习率,偏置项学习率为权值学习率的2倍
num_output: 卷积核的个数
kernel_size:卷积核大小
stride:卷积核步长
pad:边缘填充
weight_filler:权值初始化。默认为:“constant”:0,可以使用xavier算法进行初始化,也可设置为“gaussian”
bias_filler:偏置项初始化,设置为“constant”:0
bias_term:是否开启偏置项,默认为true
decay_mult:权值衰减
group: 分组,默认为1组。如果大于1,我们限制卷积的连接操作在一个子集内。如果我们根据图像的通道来分组,那么第i个输出分组只能与第i个输入分组进行连接。
dilation: 扩张卷积参数,制定该大小以后则会在进行卷积计算时,添加相应的空洞

输入数据维度为W*W
Filter大小 F×F
步长 S
padding的像素数 P
可以得出
N = (W − F + 2P )/S+1
输出大小为 N×N

2、Pooling层
层类型:Pooling
参数:
kernel_size:必选参数,在一定池化的卷积核大小
pool:池化方法,默认为MAX,还有AVE或STOCHASTIC(按照概率取,数据越大被取到概率越大)
pad:边缘填充,默认为0
stride:池化的步长 一般为2,不重叠池化
在反向传播时,我们首先会把δl的所有子矩阵矩阵大小还原成池化之前的大小,然后如果是MAX,则把δl的所有子矩阵的各个池化局域的值放在之前做前向传播算法得到最大值的位置。如果是Average,则把δl的所有子矩阵的各个池化局域的值取平均后放在还原后的子矩阵位置。这个过程一般叫做upsample。

3、softmax-loss\softmax层

softmax-loss层和softmax层计算大致是相同的。
softmax是一个分类器,计算的是类别的概率(Likelihood)
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的Softmax值就是


capture.png

也就是说,是该元素的指数,与所有元素指数和的比值
分类可以计算每个分类的概率 分类通道 N(分类数)H(图像高度)W(图像宽度),可以得出分类数的概率
softmax-loss layer:输出loss值
在神经网络的计算当中,我们经常需要计算按照神经网络的正向传播计算的分数S1,和按照正确标注计算的分数S2,之间的差距,计算Loss,才能应用反向传播。Loss定义为交叉熵

Loss.png

取log里面的值就是这组数据正确分类的Softmax值,它占的比重越大,这个样本的Loss也就越小

layer
{
    name:"loss"
    type:"SofmaxWithLoss"
    bottom:"ip1"
    bottom:"label"
    top:"loss"
}
layer
{
    name:"maxSoft"
    type:"Softmax"
    bottom:"cls3_fc"
    top:"prob"
}

4、Inner Product层

层类型:InnnerProduct
全连接层与卷积层一样 ,卷积核与数据大小一致 因此生成的数据为1*1的数据,不用指定 卷积核大小

layer
{
    name:"quanlianjie"
    type:"InnerProduct"
    bottom:"pool1"
    top:"ip1"
    param
    {
        lr_mult:1
    }
    param
    {
        lr_mult:1
    }
    inner_product_param
    {
        num_output:500
        weight_filler
        {
            type:"xavier"
         }
        bias_filler:
        {
            type:"constant"
        }
    }
}

5、Accuracy层

层类型:Accuracy
输出分类(预测)准确度,只有test阶段才有因此需要加入include参数

layer
{
    name:"acc"
    type:"Accuracy"
    bottom:"ip2"
    top:"accuracy"
    include
    {
        phase:TEST
    }
}

6、reshape层

层类型:Accuracy
在不改变数据的情况下,改变输入的维度

layer
{
    name:"reshape"
    type:"Reshape"
    bottom:"input"
    top:"output"
    reshape_param
    {
        shape
        {
            dim:0    //保持原来的维度不变
            dim:2    // 将原来的维度变为2维
            dim:3    // 将原来的维度变为3维
            dim:-1  // 系统自动计算维度
          }
        }
    }

7、Dropout层

层类型:Dropout
防止过拟合的trick,可以随机让网络某些隐藏个层节点的权重不工作

layer
{
    name:"drop"
    type:"Dropout"
    bottom:"fc7-conv"
    top:"fc7-conv"
    dropout+param
    {
        dropout_ratio:0.5
    }
}

8、Eltwise层

Eltwise层的操作有三个:product(点乘), sum(相加减) 和 max(取大值),其中sum是默认操作: 实现element_wise的A+B,即A和B的对应元素相加。

layer
{
    name:"eltwise_layer"
    type:"Eltwise"
    bottom:"A"    
    bottom:"B"
    top:"DIFF"
    eltwise_param
    {
        operation:SUM
        # 若要实现A-B则可以直接指定参数:
        coeff:1
        coeff:-1
    }
}

9、Crop层

主要作用进行裁剪,使用第二个bottom的尺寸裁剪第一个bottom
A(20,50,512,512) B(20,10,256,256)
从第二个轴开始进行裁剪
C = A[:,25:25+B.shape[1], 128+B.shape[2],128+B.shape[3]]

layer
{
    name:"crop_layer"
    type:"Crop"
    bottom:"A"    
    bottom:"B"
    top:"C"
    crop_param
    {
        axis:1
        offset:25        
        offset:128      
        offset:128
    }
}

10、InterP层

对图像进行插值运算

layer
{
    name:"input"
    type:"Interp"
    bottom:"output"
    interp_param
    {
        # 方式一:
        shrink_factor:4  #缩小因子 height_out =  ( heght_in_eff - 1)/shrink_factor +1
        zoom_factor:3   #放大因子height_out + (height_out -1) * (zoom_factor - 1)
        pad_beg:0         # 前/上部填充内容 height_in_eff = height_in + pad_beg+ pad_end      
        pad_end:0        # 下/后部填充内容    

        #########################
        # 方式二:
        height: 65       #指定插值后的图形高度
        width: 65         #指定插值后的图形宽度
    }
}

11、Concat层

把多个bottom拼接为1个output
对于两个bottom N1C1W1H1和bottom N2C2W2H2
可以对N和C进行拼接 W和H一定要一样 concat_dim

layer
{
    name:"Concat_layer"
    type:"Concat"
    bottom:"A"    
    bottom:"B"
    top:"C"
    concat_param
    {
        concat_dim:0   #为0是合并N 为1时合并C
     }
}

12、数据层图像输入层ImageData

source为 图片路径+‘ ’+ label标签

layer {
  name: "demo"
  type: "ImageData"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    scale: 0.00390625
    mean_value: 128
  }
  image_data_param {
    source: "/Data/WEP/learn-caffe/CUB_200_2011/image_label.txt"
    root_folder: "/Data/WEP/learn-caffe/CUB_200_2011/images/"
    new_height: 128
    new_width: 128
    is_color: false
    batch_size: 256
    shuffle: true
  }
}

13、激活层

能够增加模型的非线性性,以拟合复杂的函数
ReLU与其说是一个在做一个逼近,不如说是在做一个分段

14、BN层

BN就是在神经网络的训练过程中对每层的输入数据加一个标准化处理。


BN.png

在caffe网络中 最后一步γ*s2 +β由scale层实现,因此在caffe中scale层一般跟在BatchNorm层后

layer {
    bottom: "res2a_branch2b"
    top: "res2a_branch2b"
    name: "bn2a_branch2b"
    type: "BatchNorm"
    batch_norm_param {
        use_global_stats: false
    }
}

12、maxout层

同时连接多个激活函数,选择激活值最大的函数为输出,因此参数会比一个激活函数多k个,因此参数会成倍增加,该层可以看做是对激活层的学习

未完待续...

你可能感兴趣的:(caffe Layers及参数)