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

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

相应的,对于多个feature map,操作如下,原本64张224X224的图像,经过Max Pooling后,变成了64张112X112的图像,从而实现了downsampling的目的。

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

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

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

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

# 导入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到底是什么原理?

day-16 CNN卷积神经网络算法之Max pooling池化操作学习的更多相关文章

  1. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  2. CNN卷积神经网络在自然语言处理的应用

    摘要:CNN作为当今绝大多数计算机视觉系统的核心技术,在图像分类领域做出了巨大贡献.本文从计算机视觉的用例开始,介绍CNN及其在自然语言处理中的优势和发挥的作用. 当我们听到卷积神经网络(Convol ...

  3. cnn(卷积神经网络)比较系统的讲解

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...

  4. 经典卷积神经网络算法(5):ResNet

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  5. CNN卷积神经网络详解

    前言   在学计算机视觉的这段时间里整理了不少的笔记,想着就把这些笔记再重新整理出来,然后写成Blog和大家一起分享.目前的计划如下(以下网络全部使用Pytorch搭建): 专题一:计算机视觉基础 介 ...

  6. [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR

    Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...

  7. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  8. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

    https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...

  9. TensorFlow——CNN卷积神经网络处理Mnist数据集

    CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...

随机推荐

  1. center os 7 修改 mysql 密码

    笔记 本redis 密码 654321忘记密码:修改密码update user set authentication_string=password('123456') where user='roo ...

  2. 常见web漏洞

    常见的web漏洞——文件上传漏洞 一.文件上传漏洞概述    文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击方式是最为直接和有效的,有时候几乎没 ...

  3. python 基于Anaconda import numpy 报错 Importing the multiarray numpy extension module failed.

    在windows中安装了 Anaconda 运行时报错 原因是系统环境变量起初并没有引入 E:\Tools\Anaconda\Library\bin 解决办法: 在系统环境变量中加入    E:\To ...

  4. IO流之字节流

    IO流分类 按照数据流向 输入流:从外界(键盘.网络.文件…)读取数据到内存 输出流:用于将程序中的数据写出到外界(显示器.文件…) 数据源 目的地 交通工具 按照数据类型 字节流:主要用来处理字节或 ...

  5. Flink实例-Wordcount详细步骤

    link实例之Wordcount详细步骤 1.我的IDE是IntelliJ IDEA.在官网上https://www.jetbrains.com/idea/下载最新版2018.2的IDEA,如下图.破 ...

  6. html 的radio单选框如何实现互斥------radio只是input的type属性

    先看看没有互斥的情况: <html> <body> 男性:<input type="radio" id="male" /> ...

  7. 用for循环求1-100的所有数的和

    2.求1-100的所有数的和 x=0for y in range (1,101): x=x+yprint(x)#Python for循环中可以循环一个列表或者某一个字符串下面是for的基本格式,英文是 ...

  8. 第5天 Java基础语法

    第5天 Java基础语法 今日内容介绍 方法 方法 方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情(坐车到学校这 ...

  9. .Net 面试题 汇总(六)

    一.填空题 1.面向对象的语言具有(继承)性.(多态)性.(封装)性. 2.能用foreach遍历访问的对象需要实现 (IEnumberable)接口或声明(GetEnumberator)方法的类型. ...

  10. 20145207 ms11_050漏洞攻击

    实验过程 查看两台主机ip,并ping通 启动msf,进入该漏洞模块,查看漏洞的信息 exploit生成网站地址,开启服务