Caffe各层详解 学习(二)

Caffe各层详解 学习


通过学习 Caffe模型各层详解.pdf 总结笔记如下:


一、数据层

数据来自于数据库(LevelDB和LMDB)

layer{
    name:"cifar"
    type:"Data"
    top:"data" # 一般数据层都有两个输出,data和label
    top:"label"
    include{
        phase:TRAIN # include一般用来指定当前layer是属于测试还是训练
    }
    transform_param{
        mean_file:"examples/cifar10/mean.binaryproto" # 此处参数一般用于数据预处理,归一化,减均值,除方差啥的
    }
    data_param{
        source:"examples/cifar10/cifar_train_lmdb" # 数据集存储位置
        batch_size:100 # 每batch处理多少数据(张图片)
        backend: LMDB # 用的哪种(LevelDB和LMDB)
    }
    
}

其他还有数据来自MemoryData、HDF5Data、ImageData,结构大同小异:

1、MemoryData:
    必设参数:
    memory_data_param{
        batch_size:2
        height:100
        width:100
        channels:1
    }
2、HDF5:
    必设参数:
    hdf5_data_param{
        source:"examples/hdf5_calssification/data/train.txt" # 读取文件路径
        batch:10
    }
3、ImageData
    必设参数:source、batch_size
    可选参数:rand_skip、shffle(默认False)、(new_height、new_width)(如果设置则将图片resize)

ImageData举例:

layer{
    name:"data"
    type:"ImageData"
    top:"data"
    top:"label"
    transform_param{
        mirror:false # 是否对图片做镜像数据增强
        crop_size:227 # 在train阶段随机裁剪,在测试阶段裁剪中间部分
        mean_file:“data/ilsvrc12/iamge_mean.binaryproto" # 可以使用经典的BGR均值,不用对每个数据集计算均值
    }
    image_data_param{
        source:"examples/_temp/file_list.txt"
        batch_size:50
        new_height:256 # 对图片做resize
        new_width:256
    }
}

二、视觉层及参数

视觉层包括:Convolution,Pooling,Local Response Normalization(LRN),im2col等层

1、Convolution层

很简单,直接上例子吧

layer{
    name: "conv1"
    type:"Convolution"
    bottom:"data" # 接上数据层
    top:"conv1"
    param{
        lr_mult: 1 # 第一个学习率参数对应权值,具体学习率等于lr_mult*base_lr(这个设置在solver文件中) ,想要不更新(冻结)这层的参数,只需将lr_mult设置为0
    }
    param{
        lr_mult:2 # 偏置的学习率参数,同样具体学习率为lr_mult*base_lr。一般来说,偏置的学习率是权值的2倍(可能是因为一般偏置初始化为0?)
    }
    Convolution_param{
        num_output:20 # 卷积核(kernel)个数
        kernel_size:5
        stride:1
        weight_filler{
            type:"xavier" # 用何种方法初始化权值,一般有xavier、gaussion、constant(默认为0,一般用于初始化偏置)
        }
        bias_filler{
            type:"constant" # 默认为0
        }
    }
}

2、Pooling层

非常简单,看看就知道:

layer{
    name:"pool1"
    type:"Pooling"
    bottom:"conv1"
    top:"pool1"
    pooling_param{
        pool:MAX # 默认MAX,还有AVE,STOCHASTIC(统计?)
        kernel_size:3
        stride:2
    }
}
3、Local Response Normalization

对一个输入进行局部归一化,有两种方式,一种是通道间的(二维平面的一个像素点,以及这个二维平面临近二维平面的对应位置像素点组成,可以描述为 local_size x 1 x 1),一种是通道内的(描述为 1 x local_size x local_size)

计算公式:。。。自己搜吧,很简单的

给个例子:

layer{
    name:"norm1"
    type:"LRN"
    bottom:"pool1"
    top:"norm1"
    lrn_param{
        local_size:5
        alpha:0.0001
        beta:0.75
        norm_region: ACROSS_CHANNELS # 或者WITHIN_CHANNEL
    }
}

三、激活层及其参数

就是对输入的每个元素都进行了一个函数变换而已,所以输入和输出结构相同。

激活函数主要有:

Sigmoid:无参数

ReLU:一般不用参数,有可选参数negative_slope,就是负数时不再设置为0,而是原始数据*negative_slope

TanH

AbsVal:求每个输入的绝对值

Power:进行幂运算:f(x)=(shift+scale*x)^power

BNLL:f(x)=log(1+exp(x))

Power例子:

layer{    
    name:"layer"
    bottom:"in"
    top:"out"
    type:"Power" # 那些无参数的写到这就ok了
    power_param{
        power:2
        scale:1
        shift:0
    }
}

写了这么多层的例子,你还没发现吗,layer的结构就是名字、输入输出、类型加上参数,就OK了。

四、其他常用层

1、softmax层

输入是各个类的可能性,输出是似然值

例行结构:

layer{
    name:"prob"
    bottom::"cls3_fc"
    top:"prob"
    type:"Softmax"
}

2、soft-max层:输入还是可能性,先计算prob,再输出取gt类标对应的prob的负对数值

layer{
    name:"loss"
    bottom:"ip1" # 可能性
    bottom:"label"
    top:"loss"
    type:"SoftmaxWithLoss"
}

3、InnerProduct层(全连接层)
没什么好说的,和Convolution层一样,不记得的话翻上去看。

4、accuracy层
只在test阶段有
结构:

layer{
    name:"accuracy"
    bottom:"ip2"
    bottom:"label"
    top:"accuracy"
    type:"accuracy"
    include{
        phase:TEST # 只在测试阶段有
    }
}

5、Reshape层
对任意blob进行维度变换,具体看代码:

layer{
    name:"reshape"
    bottom:"in"
    top:"out"
    type:"Reshape"
    reshape_param{
        shape{
            dim:0 # 当前维度不变换
            dim:0
            dim:14 # 当前维度变为14
            dim:-1 # 根据以上维度推算这个是多少,就不用自己去算啦,交给计算机
        }
    }
}

例如:
输入blob为: (64,3,28,28)
经过例子输出blob为: ( 64,3,14,56)
数据内容不变,只是结构改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值