day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用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池化操作学习的更多相关文章
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- CNN卷积神经网络在自然语言处理的应用
摘要:CNN作为当今绝大多数计算机视觉系统的核心技术,在图像分类领域做出了巨大贡献.本文从计算机视觉的用例开始,介绍CNN及其在自然语言处理中的优势和发挥的作用. 当我们听到卷积神经网络(Convol ...
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- 经典卷积神经网络算法(5):ResNet
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- CNN卷积神经网络详解
前言 在学计算机视觉的这段时间里整理了不少的笔记,想着就把这些笔记再重新整理出来,然后写成Blog和大家一起分享.目前的计划如下(以下网络全部使用Pytorch搭建): 专题一:计算机视觉基础 介 ...
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
- TensorFlow——CNN卷积神经网络处理Mnist数据集
CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...
随机推荐
- mongodb3.4.0复制集的搭建
本次主要介绍一下我们项目中关于mongodb复制集的搭建过程. 部署三台mongodb,分别是在69,70,71上面.71上面是主节点,69和70是从节点.使用mongodb3.4.0版本. 先看一安 ...
- mysql碰到的问题总结
1.问题描述: 连接数据库出现大约10s延迟后才能连接,排除网络问题 解决方案: 通过抓包工具tcpdump抓包分析mysql在连接开始有近10s的空白请求,问题原因就在这 ,不知道在执行什么请求,后 ...
- angular 打包
ERROR in ng:///F:/IDEWorkspace/dsmc/dsmc-front-new/trunk/src/app/routes/city-manage/component-coding ...
- [原创]用python实现系统状态监测和故障转移
#coding: utf-8 import socket import select import time import os import threading def ser(): s = soc ...
- [Jmeter并发报错解决方案]org.apache.http.NoHttpResponseException: 10.0.4.147:8000 failed to respond
背景:公司模型框架是Nginx+uwsgi+Django+nginx,一开始使用Jmeter进行高并发请求测试,发现成功率只有50%,换用postman,成功率100%,代码进行高并发一样不会报错. ...
- LeetCode: 29. Divide Two Integers (Medium)
1. 原题链接 https://leetcode.com/problems/divide-two-integers/description/ 2. 题目要求 给出被除数dividend和除数divis ...
- DSP5509项目之用FFT识别钢琴音调(1)
1. 其实这个项目难点在于,能不能采集到高质量的钢琴音调.先看一下FFT相关程序. FFT 并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法.由于我们在计算 DFT 时一次复数乘法需用四 ...
- Express 总结
Express Express提供了一个轻量级模块,把nodejs的http功能封装在一个简单易用的接口中.Express也扩展了http模块的功能,能轻松处理服务器的路由.响应.cookie和HTT ...
- libevent学习一
常见的异步IO存在的问题: 1.使用 fcntl(fd, F_SETFL, O_NONBLOCK);,为什么在处理上效率不好. a.在没有数据可读写的时候,循环会不停执行,浪费掉大部分 ...
- C#监听锁屏代码
今天,偶然间在技术群看有人问,怎么监听锁屏. 在此处记录一下 public class Constrctor { public Constrctor() { SystemEvents.SessionS ...