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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
python的迭代器与生成器实例详解
Jul 16 Python
Python实现单词拼写检查
Apr 25 Python
python杀死一个线程的方法
Sep 06 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
python制作websocket服务器实例分享
Nov 20 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
Django之模板层的实现代码
Sep 09 Python
python已协程方式处理任务实现过程
Dec 27 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
Python的property属性详细讲解
Apr 11 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
JQuery中$之选择器用法介绍
2011/04/05 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
form表单序列化详解(推荐)
2017/08/15 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
python每隔N秒运行指定函数的方法
2015/03/16 Python
详解Python的单元测试
2015/04/28 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
python 实现屏幕录制示例
2019/12/23 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
行政部总经理岗位职责
2014/01/04 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫