day-16 CNN卷积神经网络算法之Max pooling池化操做学习

         利用CNN卷积神经网络进行训练时,进行完卷积运算,还须要接着进行Max pooling池化操做,目的是在尽可能不丢失图像特征前期下,对图像进行downsampling。html

         首先看下max pooling的具体操做:整个图片被不重叠的分割成若干个一样大小的小块(pooling size)。每一个小块内只取最大的数字,再舍弃其余节点后,保持原有的平面结构得出 output。web

        相应的,对于多个feature map,操做以下,本来64张224X224的图像,通过Max Pooling后,变成了64张112X112的图像,从而实现了downsampling的目的。网络

        为何能够这样?这里利用到一个特性:平移不变性(translation invariant),结论的公式证实还无从考证,不过从下面的实例能够侧面证实这点:ide

        右上角为3副横折位置不同的图像,分别同左上角的卷积核进行运算,而后再进行3X3大小池化操做之后,咱们发现最后都能获得相同的识别结果。还有人更通俗理解卷积后再进行池化运算获得相同的结果,就比如牛逼的球队分到不一样的组获得得到相同的比赛结果同样。函数

        除了Max Pooling,还有一些其它的池化操做,例如:SUM pooling、AVE pooling、MOP pooling、CROW pooling和RMAC pooling等,这里再也不进行介绍,见末尾参考文章连接。spa

        下面利用tensorflow模块的max_pool函数,实现Max pooling操做:code

# 导入tensorflow库
import tensorflow as tf

# 定义2个行为4,列为4,通道为1的数据集
batches = 2
height = 4
width = 4
channes = 1

dataset = tf.Variable(
    [
        [
            [[1.0],[2.0],[5.0],[6.0]],
            [[3.0],[4.0],[7.0],[8.0]],
            [[9.0],[10.0],[13.0],[14.0]],
            [[11.0],[12.0],[15.0],[16.0]]
        ],
        [
            [[17.0],[18.0],[21.0],[22.0]],
            [[19.0],[20.0],[23.0],[24.0]],
            [[25.0],[26.0],[29.0],[30.0]],
            [[27.0],[28.0],[31.0],[32.0]]
        ]
    ])

# 定义Max pooling操做运算,重点理解下ksize和strides两个参数的含义:
# ksize表示不一样维度Max pooling的大小,因为batches和channels两个维度不须要进行Max pooling,因此为1
# strides表示下个Max pooling位置的跳跃大小,同理,因为batches和channels两个维度不须要进行Max pooling,因此为1
X = tf.placeholder(dtype="float",shape=[None,height,width,channes])
data_max_pool = tf.nn.max_pool(value=X,ksize=[1,2,2,1],strides=[1,2,2,1],padding="VALID")

# 开始进行tensorflow计算图运算
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    input = sess.run(dataset)
    output = sess.run(data_max_pool,feed_dict = {X:input})
    print(input)
    print("===============================")
    print(output)
    

# 输入:
# [
#   [
#     [[ 1.]   [ 2.]   [ 5.]   [ 6.]]
#     [[ 3.]   [ 4.]   [ 7.]   [ 8.]]
#     [[ 9.]   [10.]   [13.]   [14.]]
#     [[11.]   [12.]   [15.]   [16.]]
#   ]
# 
#  [
#     [[17.]   [18.]   [21.]   [22.]]
#     [[19.]   [20.]   [23.]   [24.]]
#     [[25.]   [26.]   [29.]   [30.]]
#     [[27.]   [28.]   [31.]   [32.]]
#   ]
# ]
# 
# ===============================
# 输出:
# [
#   [
#     [[ 4.]   [ 8.]]
#     [[12.]   [16.]]
#   ]
#  [
#     [[20.]   [24.]]
#     [[28.]   [32.]]
#   ]
# ]

 

 

 

 

参考文章:CNN中的maxpool究竟是什么原理?htm

相关文章
相关标签/搜索