zoukankan      html  css  js  c++  java
  • Pytorch AdaptiveAvgPool

    torch.nn.functional.adaptive_avg_pool2d(input, output_size)

    将输入 NCHW 的 input 均值池化成 NC*output_size

    用于均值池化的池化块的尺寸由以下公式决定:

    [pooling\_size = (input\_size + output\_size - 1)//output\_size ]

    计算出来后,池化块的起始点就在 (0- (input\_size - pooling\_size))中选取 output_size 个等分点

    这里以一维均值池化为例,说明具体池化过程:

    • 假设你的输入尺寸是14个数字,然后期望池化后输出是4个数字

    • 这样,(pooling\_size = (14 + 4 -1)//4=4)

    • 因此,池化块的起始点在[0, 14-4] 即 [0, 10] 中选取4个等分点, 0,10已经有2个,需要再找两个,因此就是3.3333 和 6.66666,取整可得:0,3, 7,10;

    • 因此最终去均值的四个块的位置下标分别为:0-4, 3-7, 7-11, 10-14 (包括下界,不包括上界)

    • 可以看到第一个块和第二块在3这个位置出现了重叠,第三个块和第四个块在第10个位置出现了重叠;这对于 inputsize没法被output_size整除时是比较正常的现象。

    a = torch.arange(0,14., requires_grad=True)
    b = torch.nn.functional.adaptive_avg_pool1d(a[None, None], 4)
    b.backward(torch.arange(1., 1+b.size(-1))[None,None])
    print (b, a.grad)
    

    此时 b 是 1.5, 4.5, 8.5, 11.5,与按照上面规则计算相同
    再求导也可以看出来 第3个元素和第10个元素是重叠的:
    0.2500, 0.2500, 0.2500, 0.7500, 0.5000, 0.5000, 0.5000, 0.7500, 0.7500, 0.7500, 1.7500, 1.0000, 1.0000, 1.0000

    参考:
    https://discuss.pytorch.org/t/what-is-adaptiveavgpool2d/26897
    https://zhuanlan.zhihu.com/p/29923090

  • 相关阅读:
    SpringMVC-Day1 (课题有用)
    Spring-Day3
    Spring-Day2
    fix mac
    新西兰产假(陪产假)
    nz 国内航空
    英文句子
    centos7.2安装swoole扩展
    linux搭建vue框架部署环境
    微信扫描带参数二维码事件
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/11560398.html
Copyright © 2011-2022 走看看