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模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Jul 04 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
python实现自动登录
Sep 17 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
Python创建文件夹与文件的快捷方法
Dec 08 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源代码数组统计count分析
2011/08/02 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
python 显示数组全部元素的方法
2018/04/19 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
python3实现windows下同名进程监控
2018/06/21 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
Python类成员继承重写的实现
2020/09/16 Python
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
什么是设计模式
2012/06/17 面试题
社区党员先进事迹
2014/01/22 职场文书
初中学习计划书范文
2014/09/15 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书