对池化操作和激活函数的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wgj99991111/article/details/83545301

写这个笔记的时候,忽闻金庸去世,“飞雪连天射白鹿,笑书神侠倚碧鸳”纪念大侠的归去,也纪念我那失去的青春。

  • 一、池化操作
    1、池化的目的:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。
    2、对池化的理解:池化可以理解为一种采样,获取图像的概要统计特征。就好像在太空上俯瞰地球,看到的只有山脊和雪峰。这即是对特征进行宏观上的进一步抽象。 经过池化后,得到的是 概要统计特征 。它们不仅 具有低得多的维度 (相比使用所有提取得到的特征),同时还会 改善结果(不容易过拟合) 。
    max_pooling: 夜晚的地球俯瞰图,灯光耀眼的穿透性让人们只注意到最max的部分,产生亮光区域被放大的视觉错觉。故而 max_pooling 对较抽象一点的特征(如纹理)提取更好。
    average_pooling: 白天的地球俯瞰图,幅员辽阔的地球表面,仿佛被经过了二次插值的缩小,所有看到的都是像素点取平均的结果。故而 average_pooling 对较形象的特征(如背景信息)保留更好。
    另一种理解:
    池化=涨水
    卷积的目的是为了得到物体的边缘形状
    可以想象水要了解山立体的形状
    水位低时得出山脚的形状
    水位中等时得出山腰的形状
    水位高时得出山顶的形状
    三点就可以大致描出山的简笔画
    池化的过程=升高水位(扩大矩阵网格)
    卷积的过程是区分哪里是水,哪里是山

    3、具体操作模型
    参考:
    https://blog.csdn.net/app_12062011/article/details/57075538
    https://blog.csdn.net/kebu12345678/article/details/54923118?utm_source=blogxgwz0
    4、常用池化函数
    tf.nn.max_pool(value, ksize, strides, padding, name=None)
    参数是四个,和卷积很类似:

    第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape

    第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1

    第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]

    第四个参数padding:和卷积类似,可以取’VALID’ 或者’SAME’

    返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式

  • 二、激活函数
    1、激活的目的:1)克服梯度消失的问题;2)加快训练速度
    2、激活函数的原理:激活函数又称为线性整流函数(Rectified Linear Unit, ReLU),或者修正线性单元。就是将输入小于0的值幅值为0,输入大于0的值不变。
    3、函数代码测试结果如下:

    import tensorflow as tf
    a = tf.constant([-1.0, 2.0,-3.6])
    with tf.Session() as sess:
    b = tf.nn.relu(a)
    print(sess.run(b))

    测试结果为:
    [0. 2. 0.]

参考文献:https://blog.csdn.net/JNingWei/article/details/78833319

猜你喜欢

转载自blog.csdn.net/wgj99991111/article/details/83545301