美文网首页深度学习
CNN个人复习总结

CNN个人复习总结

作者: 早上起来闹钟又丢了 | 来源:发表于2019-05-15 15:32 被阅读9次

    最近想再巩固一下CNN,看到了一篇非常好的文章,向大佬学习。
    作者:Charlotte77
    出处:http://www.cnblogs.com/charlotte77/
    原文链接:https://www.cnblogs.com/charlotte77/p/7759802.html

    1. 卷积特征

    image.png

    通过第一个卷积核计算后的feature_map是一个三维数据,在第三列的绝对值最大,说明原始图片上对应的地方有一条垂直方向的特征,即像素数值变化较大;而通过第二个卷积核计算后,第三列的数值为0,第二行的数值绝对值最大,说明原始图片上对应的地方有一条水平方向的特征。

    feature_map尺寸计算公式:[ (原图片尺寸 -卷积核尺寸)/ 步长 ] + 1

    2.卷积核

    上图中两个卷积核分别能够提取不同特征,说明我们其实可以把卷积核就理解为特征提取。

    3.池化层

    池化层的主要目的是通过降采样的方式,在不影响图像质量的情况下,压缩图片,减少参数。

    通常来说,池化方法一般有一下两种:

    • MaxPooling:取滑动窗口里最大的值
    • AveragePooling:取滑动窗口内所有值的平均值

    一般采用MaxPooling,这样提取出的是真正能够识别特征的数值,其余被舍弃的数值,对于我提取特定的特征并没有特别大的帮助。但并不是所有情况下Max Pooling的效果都很好,所以具体情况得具体分析,如果加了Max Pooling后效果反而变差了,不如把卷积后不加Max Pooling的结果与卷积后加了Max Pooling的结果输出对比一下,看看Max Pooling是否对卷积核提取特征起了反效果。

    4.Zero Padding(补零)

    卷积和池化会将图片维度大小降低,如果一直这样添加层,那么图片会越来越小,因此提出Zero Padding(补零)操作,它可以帮助我们保证每次经过卷积或池化输出后图片的大小不变。

    image.png

    一般会选择尺寸为3 * 3的卷积核和1的zero padding,或者5 * 5的卷积核与2的zero padding,这样通过计算后,可以保留图片的原始尺寸。那么加入zero padding后的feature_map尺寸 =( width + 2 * padding_size - filter_size )/stride + 1

    5.Flatten层 & Fully Connected Layer

    image.png

    6.Keras

    卷积函数:

    keras.layers.convolutional.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
    
    • filters:卷积核的数目(即输出的维度)

    • kernel_size:单个整数或由两个整数构成的list/tuple,卷积核的宽度和长度。如为单个整数,则表示在各个空间维度的相同长度。

    • strides:单个整数或由两个整数构成的list/tuple,为卷积的步长。如为单个整数,则表示在各个空间维度的相同步长。任何不为1的strides均与任何不为1的dilation_rate均不兼容

    • padding:补0策略,为“valid”, “same” 。“valid”代表只进行有效的卷积,即对边界数据不处理。“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。

    • activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)

    • dilation_rate:单个整数或由两个个整数构成的list/tuple,指定dilated convolution中的膨胀比例。任何不为1的dilation_rate均与任何不为1的strides均不兼容。

    • data_format:字符串,“channels_first”或“channels_last”之一,代表图像的通道维的位置。该参数是Keras 1.x中的image_dim_ordering,“channels_last”对应原本的“tf”,“channels_first”对应原本的“th”。以128x128的RGB图像为例,“channels_first”应将数据组织为(3,128,128),而“channels_last”应将数据组织为(128,128,3)。该参数的默认值是~/.keras/keras.json中设置的值,若从未设置过,则为“channels_last”。

    • use_bias:布尔值,是否使用偏置项

    • kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers

    • bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers

    • kernel_regularizer:施加在权重上的正则项,为Regularizer对象

    • bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象

    • activity_regularizer:施加在输出上的正则项,为Regularizer对象

    • kernel_constraints:施加在权重上的约束项,为Constraints对象

    • bias_constraints:施加在偏置上的约束项,为Constraints对象

    padding = ‘valid’ 时,没有填充,此时输出的size总比原图的size小.。
    padding = ‘same’ 时,用0填充边界,能覆盖原图所有像素,不会舍弃边上的元素;当步长/stride为1时,输出和原图size一致。

    池化函数:

    keras.layers.pooling.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
    
    • pool_size:整数或长为2的整数tuple,代表在两个方向(竖直,水平)上的下采样因子,如取(2,2)将使图片在两个维度上均变为原长的一半。为整数意为各个维度值相同且为该数字。

    • strides:整数或长为2的整数tuple,或者None,步长值。

    • border_mode:‘valid’或者‘same’

    • data_format:字符串,“channels_first”或“channels_last”之一,代表图像的通道维的位置。该参数是Keras 1.x中的image_dim_ordering,“channels_last”对应原本的“tf”,“channels_first”对应原本的“th”。以128x128的RGB图像为例,“channels_first”应将数据组织为(3,128,128),而“channels_last”应将数据组织为(128,128,3)。该参数的默认值是~/.keras/keras.json中设置的值,若从未设置过,则为“channels_last”。

    相关文章

      网友评论

        本文标题:CNN个人复习总结

        本文链接:https://www.haomeiwen.com/subject/iwguaqtx.html