|
|
51CTO旗下网站
|
|
移动端

5.4.1 二维最大池化层和平均池化层

《动手学深度学习》第5章卷积神经网络,本章将介绍卷积神经网络,它是近年来深度学习能在计算机视觉领域取得突破性成果的基石。本节为大家介绍二维最大池化层和平均池化层。

作者:阿斯顿·张(Aston Zhang)等来源:人民邮电出版社|2019-06-29 13:46

5.4 池化层


回忆一下,在5.1节里介绍的图像物体边缘检测应用中,我们构造卷积核从而精确地找到了像素变化的位置。设任意二维数组X的i行j列的元素为X[i, j]。如果我们构造的卷积核输出Y[i, j]=1,那么说明输入中X[i, j]和X[i, j+1]数值不一样。这可能意味着物体边缘通过这两个元素之间。但实际图像里,我们感兴趣的物体不会总出现在固定位置:即使我们连续拍摄同一个物体也极有可能出现像素位置上的偏移。这会导致同一个边缘对应的输出可能出现在卷积输出Y中的不同位置,进而对后面的模式识别造成不便。

在本节中我们介绍池化(pooling)层,它的提出是为了缓解卷积层对位置的过度敏感性。

5.4.1 二维***池化层和平均池化层

同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出。不同于卷积层里计算输入和核的互相关性,池化层直接计算池化窗口内元素的***值或者平均值。该运算也分别叫作***池化或平均池化。在二维***池化中,池化窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当池化窗口滑动到某一位置时,窗口中的输入子数组的***值即输出数组中相应位置的元素。

图5-6展示了池化窗口形状为2×2的***池化,阴影部分为***个输出元素及其计算所使用的输入元素。输出数组的高和宽分别为2,其中的4个元素由取***值运算max得出:

二维平均池化的工作原理与二维***池化类似,但将***运算符替换成平均运算符。池化窗口形状为p \times q的池化层称为p×q池化层,其中的池化运算叫作p×q池化。

让我们再次回到本节开始提到的物体边缘检测的例子。现在我们将卷积层的输出作为2×2***池化的输入。设该卷积层输入是X、池化层输出为Y。无论是X[i, j]和X[i, j+1]值不同,还是X[i, j+1]和X[i, j+2]不同,池化层输出均有Y[i, j]=1。也就是说,使用2×2***池化层时,只要卷积层识别的模式在高和宽上移动不超过一个元素,我们依然可以将它检测出来。

下面把池化层的前向计算实现在pool2d函数里。它与5.1节里corr2d函数非常类似,唯一的区别在计算输出Y上。

  1. In [1]: from mxnet import nd  
  2.         from mxnet.gluon import nn  
  3.         def pool2d(X, pool_size, mode='max'):   
  4.             p_h, p_w = pool_size 
  5.             Y = nd.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))  
  6.             for i in range(Y.shape[0]):  
  7.                 for j in range(Y.shape[1]):  
  8.                     if mode == 'max':  
  9.                         Y[i, j] = X[i: i + p_h, j: j + p_w].max()  
  10.                     elif mode == 'avg':  
  11.                         Y[i, j] = X[i: i + p_h, j: j + p_w].mean()  
  12.             return Y  

我们可以构造图5-6中的输入数组X来验证二维***池化层的输出。

  1. In [2]: X = nd.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])  
  2.         pool2d(X, (2, 2))  
  3. Out[2]:  
  4.         [[4. 5.]  
  5.          [7. 8.]]  
  6.         <NDArray 2x2 @cpu(0)> 

同时我们实验一下平均池化层。

  1. In [3]: pool2d(X, (2, 2), 'avg')  
  2. Out[3]:  
  3.         [[2. 3.]  
  4.          [5. 6.]]  
  5.         <NDArray 2x2 @cpu(0)> 


喜欢的朋友可以加入官方的读书群

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

《ASP.NET AJAX Web 应用开发秘诀(VB版)》

本书详细介绍了AJAX在Web开发上的应用。主要内容包括:ASP.NET AJAX技术概述、实现异步局部更新页面、UpdatePanel编程功能、PageRequestMan...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客