PyTorch的自适应池化Adaptive Pooling实例


Posted in Python onJanuary 03, 2020

简介

自适应池化Adaptive Pooling是PyTorch含有的一种池化层,在PyTorch的中有六种形式:

自适应最大池化Adaptive Max Pooling:

torch.nn.AdaptiveMaxPool1d(output_size)
torch.nn.AdaptiveMaxPool2d(output_size)
torch.nn.AdaptiveMaxPool3d(output_size)

自适应平均池化Adaptive Average Pooling:

torch.nn.AdaptiveAvgPool1d(output_size)
torch.nn.AdaptiveAvgPool2d(output_size)
torch.nn.AdaptiveAvgPool3d(output_size)

具体可见官方文档。

官方给出的例子:
>>> # target output size of 5x7
>>> m = nn.AdaptiveMaxPool2d((5,7))
>>> input = torch.randn(1, 64, 8, 9)
>>> output = m(input)
>>> output.size()
torch.Size([1, 64, 5, 7])

>>> # target output size of 7x7 (square)
>>> m = nn.AdaptiveMaxPool2d(7)
>>> input = torch.randn(1, 64, 10, 9)
>>> output = m(input)
>>> output.size()
torch.Size([1, 64, 7, 7])

>>> # target output size of 10x7
>>> m = nn.AdaptiveMaxPool2d((None, 7))
>>> input = torch.randn(1, 64, 10, 9)
>>> output = m(input)
>>> output.size()
torch.Size([1, 64, 10, 7])

Adaptive Pooling特殊性在于,输出张量的大小都是给定的output_size output\_sizeoutput_size。例如输入张量大小为(1, 64, 8, 9),设定输出大小为(5,7),通过Adaptive Pooling层,可以得到大小为(1, 64, 5, 7)的张量。

原理

PyTorch的自适应池化Adaptive Pooling实例

>>> inputsize = 9
>>> outputsize = 4

>>> input = torch.randn(1, 1, inputsize)
>>> input
tensor([[[ 1.5695, -0.4357, 1.5179, 0.9639, -0.4226, 0.5312, -0.5689, 0.4945, 0.1421]]])

>>> m1 = nn.AdaptiveMaxPool1d(outputsize)
>>> m2 = nn.MaxPool1d(kernel_size=math.ceil(inputsize / outputsize), stride=math.floor(inputsize / outputsize), padding=0)
>>> output1 = m1(input)
>>> output2 = m2(input)

>>> output1
tensor([[[1.5695, 1.5179, 0.5312, 0.4945]]]) torch.Size([1, 1, 4])
>>> output2
tensor([[[1.5695, 1.5179, 0.5312, 0.4945]]]) torch.Size([1, 1, 4])

通过实验发现:

PyTorch的自适应池化Adaptive Pooling实例

下面是Adaptive Average Pooling的c++源码部分。

template <typename scalar_t>
 static void adaptive_avg_pool2d_out_frame(
      scalar_t *input_p,
      scalar_t *output_p,
      int64_t sizeD,
      int64_t isizeH,
      int64_t isizeW,
      int64_t osizeH,
      int64_t osizeW,
      int64_t istrideD,
      int64_t istrideH,
      int64_t istrideW)
 {
  int64_t d;
 #pragma omp parallel for private(d)
  for (d = 0; d < sizeD; d++)
  {
   /* loop over output */
   int64_t oh, ow;
   for(oh = 0; oh < osizeH; oh++)
   {
    int istartH = start_index(oh, osizeH, isizeH);
    int iendH  = end_index(oh, osizeH, isizeH);
    int kH = iendH - istartH;

    for(ow = 0; ow < osizeW; ow++)
    {
     int istartW = start_index(ow, osizeW, isizeW);
     int iendW  = end_index(ow, osizeW, isizeW);
     int kW = iendW - istartW;

     /* local pointers */
     scalar_t *ip = input_p  + d*istrideD + istartH*istrideH + istartW*istrideW;
     scalar_t *op = output_p + d*osizeH*osizeW + oh*osizeW + ow;

     /* compute local average: */
     scalar_t sum = 0;
     int ih, iw;
     for(ih = 0; ih < kH; ih++)
     {
      for(iw = 0; iw < kW; iw++)
      {
       scalar_t val = *(ip + ih*istrideH + iw*istrideW);
       sum += val;
      }
     }

     /* set output to local average */
     *op = sum / kW / kH;
    }
   }
  }
}

以上这篇PyTorch的自适应池化Adaptive Pooling实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
Python实现备份MySQL数据库的方法示例
Jan 11 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Python装饰器语法糖
Jan 02 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
安装PyInstaller失败问题解决
Dec 14 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
Python如何将函数值赋给变量
Apr 28 Python
带你学习Python如何实现回归树模型
Jul 16 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
DRF框架API版本管理实现方法解析
Aug 21 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 #Python
pytorch AvgPool2d函数使用详解
Jan 03 #Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 #Python
Python基础之函数原理与应用实例详解
Jan 03 #Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 #Python
Python基础之高级变量类型实例详解
Jan 03 #Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 #Python
You might like
php数据库配置文件一般做法分享
2012/07/07 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
python中执行shell命令的几个方法小结
2014/09/18 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python实现猜拳小游戏
2020/04/05 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
关于python中remove的一些坑小结
2021/01/04 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
营业经理岗位职责
2013/11/10 职场文书
文明倡议书范文
2014/04/15 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
小学数学课题方案
2014/06/15 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
先进个人自荐书
2015/03/06 职场文书
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript
Python序列化模块JSON与Pickle
2022/06/05 Python