在池化操作的接口中,padding和ceil_mode这两个参数会影响到输出特征图的大小。padding即对特征图大小进行扩充的像素数量;ceil_mode指明,当剩余的像素不足滤波器大小,是否仍对这些像素进行运算。
对于池化操作来说,当stride为1时,希望输出与输入保持不变;当stride为2时,希望输出特征图的宽高均为输入的一半。下面以avg_pool2d讲解如何尽量简单达到上述目的:

import torch
import torch.nn.functional as fy = torch.tensor([[[[1,5,4,9]]]])print(f.avg_pool2d(y, (1, 3), stride=2, padding=0, ceil_mode=False)) # tensor([[[[3]]]])
print(f.avg_pool2d(y, (1, 3), stride=2, padding=0, ceil_mode=True))  # tensor([[[[3, 6]]]])
print(f.avg_pool2d(y, (1, 3), stride=2, padding=(0, 1), ceil_mode=False)) # tensor([[[[2, 6]]]])
print(f.avg_pool2d(y, (1, 3), stride=2, padding=(0, 1), ceil_mode=True))  # tensor([[[[2, 6, 4]]]])print(f.avg_pool2d(y, (1, 3), stride=1, padding=0, ceil_mode=False)) # tensor([[[[3, 6]]]])
print(f.avg_pool2d(y, (1, 3), stride=1, padding=0, ceil_mode=True))  # tensor([[[[3, 6]]]])
print(f.avg_pool2d(y, (1, 3), stride=1, padding=(0, 1), ceil_mode=False)) # tensor([[[[2, 3, 6, 4]]]])
print(f.avg_pool2d(y, (1, 3), stride=1, padding=(0, 1), ceil_mode=True))  # tensor([[[[2, 3, 6, 4]]]])

stride=2时:
若padding为0,则padding后仍为[1, 5, 4, 9]。第一次运算对[1, 5, 4]进行,得到3(向下取整);由于stride=2,则 第二次运算只剩[4, 9]这一个像素,小于kernel_size,此时,若ceil_mode=False,则直接不对剩余的部分运算,因此输出大小为1;若ceil_mode=True,则对剩余部分继续计算,取[4, 9]的均值6(向下取整),因此输出大小为2。若padding=1,PyTorch的默认padding值为0,则该维度上padding后为[0, 1, 5, 4, 9, 0],ceil_mode=False时,输出为[2, 6];ceil_mode=True时,输出为[2, 6, 4]。

stride=1时:
若padding=0,则输出为[3, 6];若padding=1,输入为[0, 1, 5, 4, 9, 0],输出为[2, 3, 6, 4]。stride=1时,ceil_mode的值不起作用,始终为False。

总结:

stride=2,padding=1或ceil__mode=True;stride=1时,必须有padding=1,ceil_mode的设置不起作用。

推广:

ceil_mode始终保持PyTorch的默认值False,且padding始终为kernel_size // 2。

PyTorch中池化操作还有一个与padding有关的参数count_include_pad,默认为True。意义是在运算(比如计算平均值或最大值)时,始终将padding的值纳入计算。

import torch
import torch.nn.functional as f
y = torch.tensor([[[[1,5,4,9]]]])print(f.avg_pool2d(y, (1, 3), stride=2, padding=(0, 1), ceil_mode=False)) # tensor([[[[2, 6]]]])
print(f.avg_pool2d(y, (1, 3), stride=2, padding=(0, 1), count_include_pad=False, ceil_mode=False)) # tensor([[[[3, 6]]]])print(f.avg_pool2d(y, (1, 3), stride=1, padding=(0, 1), ceil_mode=False)) # tensor([[[[2, 3, 6, 4]]]])
print(f.avg_pool2d(y, (1, 3), stride=1, padding=(0, 1), count_include_pad=False, ceil_mode=False)) # tensor([[[[3, 3, 6, 4]]]])

如在上述例子中,stride=2,padding=1,ceil_mode=False时,若将count_include_pad设为False,则结果由[2, 6]变为[3, 6]。一般的,进行平均池化时,将该参数设为False;进行最大池化时,可保持默认不变,为True。

PyTorch中池化层的padding和ceil_mode参数设置相关推荐

  1. pytorch之池化层

    ·实际图像里,我们感兴趣的物体不会总出现在固定位置:即使我们连续拍摄同一个物体也极有可能出现像素位置上的偏移.这会导致同一个边缘对应的输出可能出现在卷积输出 Y中的不同位置,进而对后面的模式识别造成不 ...

  2. 卷积层,池化层,padding=‘same‘ ,为什么卷积层图像尺寸不变,池化层后图像尺寸减半呢?

    先摆一下通用计算公式: h:图像长度,k:卷积/池化核尺寸,p:填充数,s:移动步长 长度公式: 宽度公式: 对于经过卷积,池化后的图像尺寸都可以按照此公式进行计算. 在实际的使用过程中经常会有此疑惑 ...

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

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

  4. 花书+吴恩达深度学习(十一)卷积神经网络 CNN 之池化层

    目录 0. 前言 1. 最大池化(max pooling) 2. 平移不变形 3. 其他池化函数 4. 卷积和池化作为一种无限强的先验 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常 ...

  5. 深度学习之卷积神经网络(7)池化层

    深度学习之卷积神经网络(7)池化层 在卷积层中,可以通过调节步长参数s实现特征图的高宽成倍缩小,从而降低了网络的参数量.实际上,处理通过设置步长,还有一种专门的网络层可以实现尺寸缩减功能,它就是这里要 ...

  6. 深度学习基础之池化层

     谷歌浏览器搜索.看Youtube视频必备VPN:SockBoom 或者网址:https://sockboom.bar/auth/register?affid=212828 一.深度学习中池化层的作用 ...

  7. 图像识别(七)| 池化层是什么?有什么作用?

    前面的文章 图像识别(番外1)| AI算法攻城狮左手图纸,右手搬砖的真实性以及长图展示Resnet全貌和可视化CNN_董董灿是个攻城狮的博客-CSDN博客_ai图像识别算法中,展示了一张Resnet5 ...

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

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

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

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

最新文章

  1. 超 31% 生成文本涉暴力色情,GPT-3 模型在 AI Dungeon 游戏里疯狂「飙车」!
  2. 【解决办法】torch交叉熵使用时遇到 Dimension out of range
  3. C#反编译工具Reflector使用方法
  4. 如何快速掌握一门新技术/语言/框架…
  5. Ex 2_5 求解递推式..._第三次作业
  6. 年轻人,莫把技术当全部
  7. .net知识和学习方法系列(前言)
  8. WordPress 后台评论如何自定义搜索条件
  9. 聚类分析应用之市场细分
  10. 基于Bayes和KNN的newsgroup 18828文本分类器的Python实现
  11. php 中echo用法,php中echo()函数的用法(附代码)
  12. 天正cad计算机快捷键,CAD、天正快捷键(专用)
  13. Android混淆和加固详解
  14. 最好的网盘--主流网盘大比拼
  15. 现在Web前端培训,哪个机构比较好?
  16. 心电信号越界怎么回事_人体心电信号的特点
  17. PHP 实现微信公众号网页授权登录
  18. Windows Server 2008 R2 远程管理
  19. Excel常用数据分析技能(PowerBI)
  20. ResNet+cifar10总结-由浅入深

热门文章

  1. 前往美孚主义2013
  2. AES加密/解密报错,Input length must be multiple of 16 when decrypting with padded cipher
  3. qq不显示我的android手机号码,QQ手机通讯录怎么设置不显示推荐联系人?
  4. 电影评论系统C语言,源代码电影评论
  5. Rust 的优点是什么?
  6. 植王分享:养兰花的十大好处
  7. back track 5 / BT5 默认用户名密码
  8. Python入门练习 计算两个日期相隔的天数
  9. 被ddos攻击了怎么办,阿里云又太贵了
  10. php输出扶墙而立的三角形,第10章 天天扶墙而立