·实际图像里,我们感兴趣的物体不会总出现在固定位置:即使我们连续拍摄同一个物体也极有可能出现像素位置上的偏移。这会导致同一个边缘对应的输出可能出现在卷积输出 Y中的不同位置,进而对后面的模式识别造成不便。
在本节中我们介绍池化(pooling)层,它的提出是为了缓解卷积层对位置的过度敏感性

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

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

下面把池化层的前向计算实现在pool2d函数里。它跟5.1节(二维卷积层)里corr2d函数非常类似,唯一的区别在计算输出Y

import torch
from torch import nndef pool2d(X, pool_size, mode='max'):X = X.float()p_h, p_w = pool_sizeY = torch.zeros(X.shape[0] - p_h + 1, X.shape[1] - p_w + 1)for i in range(Y.shape[0]):for j in range(Y.shape[1]):if mode == 'max':Y[i, j] = X[i: i + p_h, j: j + p_w].max()elif mode == 'avg':Y[i, j] = X[i: i + p_h, j: j + p_w].mean()       return Y

我们可以构造图5.6中的输入数组X来验证二维最大池化层的输出。

X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
pool2d(X, (2, 2))

输出:

tensor([[4., 5.],[7., 8.]])

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

pool2d(X, (2, 2), 'avg')

输出:

tensor([[2., 3.],[5., 6.]])

2. 填充和步幅

同卷积层一样,池化层也可以在输入的高和宽两侧的填充并调整窗口的移动步幅来改变输出形状。池化层填充和步幅与卷积层填充和步幅的工作机制一样。我们将通过nn模块里的二维最大池化层MaxPool2d来演示池化层填充和步幅的工作机制。我们先构造一个形状为(1, 1, 4, 4)的输入数据,前两个维度分别是批量和通道。

X = torch.arange(16, dtype=torch.float).view((1, 1, 4, 4))
X

输出:

tensor([[[[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.]]]])

默认情况下,MaxPool2d实例里步幅和池化窗口形状相同。下面使用形状为(3, 3)的池化窗口,默认获得形状为(3, 3)的步幅。

pool2d = nn.MaxPool2d(3)
pool2d(X)

输出:

tensor([[[[10.]]]])

我们可以手动指定步幅和填充。

pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)

输出;

tensor([[[[ 5.,  7.],[13., 15.]]]])

当然,我们也可以指定非正方形的池化窗口,并分别指定高和宽上的填充和步幅。


pool2d = nn.MaxPool2d((2, 4), padding=(1, 2), stride=(2, 3))
pool2d(X)

输出:

tensor([[[[ 1.,  3.],[ 9., 11.],[13., 15.]]]])

3. 多通道

在处理多通道输入数据时,池化层对每个输入通道分别池化,而不是像卷积层那样将各通道的输入按通道相加。这意味着池化层的输出通道数与输入通道数相等。下面将数组XX+1在通道维上连结来构造通道数为2的输入。

X = torch.cat((X, X + 1), dim=1)
X

输出:

tensor([[[[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.]],[[ 1.,  2.,  3.,  4.],[ 5.,  6.,  7.,  8.],[ 9., 10., 11., 12.],[13., 14., 15., 16.]]]])

池化后,我们发现输出通道数仍然是2。

pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)

输出:

tensor([[[[ 5.,  7.],[13., 15.]],[[ 6.,  8.],[14., 16.]]]])

pytorch之池化层相关推荐

  1. PyTorch中池化层的padding和ceil_mode参数设置

    在池化操作的接口中,padding和ceil_mode这两个参数会影响到输出特征图的大小.padding即对特征图大小进行扩充的像素数量:ceil_mode指明,当剩余的像素不足滤波器大小,是否仍对这 ...

  2. 狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层

    狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层 在这篇文章中您将会从数学和算法两个角度去重新温习一下卷积层,激活函数,池化层,Dropout层,BN层,全链接 ...

  3. (pytorch-深度学习系列)pytorch卷积层与池化层输出的尺寸的计算公式详解

    pytorch卷积层与池化层输出的尺寸的计算公式详解 要设计卷积神经网络的结构,必须匹配层与层之间的输入与输出的尺寸,这就需要较好的计算输出尺寸 先列出公式: 卷积后,池化后尺寸计算公式: (图像尺寸 ...

  4. pytorch 入门:GPU加速,卷积层,池化层

    GPU 加速 深度学习设计很多向量和多矩阵运算,比如BP , CNN 等深层模型都可以写成矩阵运算的格式,不用写成循环运算.但是CPU 上矩阵的运算会被展成循环的形式,CPU 是串行执行的.而GPU ...

  5. pytorch学习笔记七:nn网络层——池化层、线性层

    一.池化层 池化运算:对信号进行"收集" 并"总结",类似于水池收集水资源,因而得名池化层. 收集:由多变少,图像的尺寸由大变小 总结:最大值/平均值 下面是最 ...

  6. 【动手学深度学习PyTorch版】15 池化层

    上一篇请移步[动手学深度学习PyTorch版]14 卷积层里的多输入多输出通道_水w的博客-CSDN博客 目录 一.池化层 1.1 池化层 ◼池化层原因 ◼ 二维最大池化 1.2 填充.步幅与多个通道 ...

  7. 池化层:最大池化MaxPool、平均池化AvgPool、自适应池化AdaptiveMaxPool区别--基于pytorch框架

    文章目录 MaxPool2d最大池化 AvgPool2d平均池化 AdaptiveAvgPool2d自适应平均池化 池化操作的一个重要的目的就是对卷积后得到的特征进行进一步处理,池化层可以起到对数据进 ...

  8. [pytorch、学习] - 5.4 池化层

    参考 5.4 池化层 在本节中我们介绍池化(pooling)层,它的提出是为了缓解卷积层对位置的过度敏感性. 5.4.1 二维最大池化层和平均池化层 池化层直接计算池化窗口内元素的最大值或者平均值.该 ...

  9. PyTorch——池化层

    参考链接 https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.4_pooling 二维最大池化层和平均池化层 池化(pooling ...

最新文章

  1. 深度解析 | 大数据面前,统计学的价值在哪里?
  2. java nio doug_Java NIO简介
  3. 一文弄懂用户画像以及如何召回用户
  4. debian linux 内核 3.14-1 显示器 很暗,Ubuntu 与 Linux Mint 用户安装 Kernel 3.14.1 内核
  5. plc和pc串口通讯接线_Plc与pc串口调试手册
  6. lte接口流程图_请画出LTE系统的组网图及标注接口。
  7. [导入]创建一个ASP通用分页类代码部分
  8. 本人薛广涛,2004年毕业于上海交通大学计算机系软件与理论专业,上海交通大学计算机科学与工程系(CSE)...
  9. 矩阵分析 (五) 矩阵的分解
  10. PHP 后台程序配置config文件,及form表单上传文件
  11. EXCEL 连接符的使用
  12. 七日年化收益率计算器_定投收益率该怎么算?
  13. Android Studio 开关控件Switch使用
  14. 淘宝店铺介绍范文如何写的技巧详细分析!
  15. The Top 5 cloud security threats presented by Mark Russinovich
  16. Java爆笑梗,jvav是什么鬼!盘点那些迷你小学生中那些笑死人的梗
  17. 小米电视刷鸿蒙系统,小米电视怎么刷鸿蒙OS系统?一招立省上千块
  18. opencv学习笔记之像素处理
  19. 矩阵连乘 动态规划_如何构建移动营销时代的“动态矩阵”?
  20. JavaWeb是什么?如何学习JavaWeb的体系

热门文章

  1. 天天写日记争当文艺青年 2014-5-14
  2. 用二分法求一元非线性方程f(x)= x3/2+2x2-8=0 在区间[0, 2]上的近似实根r,精确到0.0001(C++)(迭代法)
  3. android判断网络类型5G,5G意识已经普及 但你知道5G网络有哪些类型吗
  4. 制作一个正三角履带底盘【内附资料下载链接】
  5. 啥?朋友圈屏蔽我。居然连QQ空间都屏蔽我,不行,我得用Python找出来哪些人。
  6. 解决 PopupWindow 使其点击外部不消失
  7. 托福、雅思、SAT,3月份出国考试全部取消!
  8. 一种带开关量的开口式电流互感器,防止人为打开
  9. quark renderer开篇 一
  10. 《新课程理念与教学改革》