搜索

查看: 3113|回复: 11

[Python] Pytorch平均池化nn.AvgPool2d()使用方法实例

[复制链接]
发表于 2023-5-4 17:23:52 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:23:52 3113 11 看全部
目录
  • torch.nn.AvgPool2d()
  • 作用
  • 函数
  • 参数
  • 公式
  • 代码实例
  • 情况一
  • 情况二
  • 情况三
  • 情况四
  • 总结【pytorch官方文档】:https://pytorch.org/docs/stable/generated/torch.nn.AvgPool2d.html?highlight=avgpool2d

    torch.nn.AvgPool2d()
    作用
    在由多通道组成的输入特征中进行2D平均池化计算

    函数
    torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)
    参数
    Args:
        kernel_size: 滑窗(池化核)大小
        stride: 滑窗的移动步长, 默认值为kernel_size
        padding: 在输入信号两侧的隐式零填充数量
        ceil_mode: 决定计算输出的形状时是向上取整还是向下取整, 默认为False(向下取整)
        count_include_pad: 在平均池化计算中是否包含零填充, 默认为True(包含零填充)
        divisor_override: 如果指定了, 它将被作为平均池化计算中的除数, 否则将使用池化区域的大小作为平均池化计算的除数

    公式

    2023022210325740.png

    2023022210325740.png


    代码实例
    假设输入特征为S,输出特征为D

    情况一
    ceil_mode=False, count_include_pad=True(计算时包含零填充)
    import torch
    import torch.nn as nn
    import numpy as np


    # 生成一个形状为1*1*3*3的张量
    x1 = np.array([
                  [1,2,3],
                  [4,5,6],
                  [7,8,9]
                ])
    x1 = torch.from_numpy(x1).float()
    x1 = x1.unsqueeze(0).unsqueeze(0)

    # 实例化二维平均池化
    avgpool1 = nn.AvgPool2d(kernel_size=3, stride=2, padding=1, ceil_mode=False, count_include_pad=True)
    y1 = avgpool1(x1)
    print(y1)

    # 打印结果
    '''
    tensor([[[[1.3333, 1.7778],
              [2.6667, 3.1111]]]])
    '''
    计算过程:
    输出形状= floor[(3 - 3 + 2) / 2] + 1 = 2,
    D[1,1] = (0+0+0+0+1+2+0+4+5) / 9 = 1.3333,
    D[1,2] = (0+0+0+2+3+0+5+6+0) / 9 = 1.7778,
    D[2,1] = (0+4+5+0+7+8+0+0+0) / 9 = 2.6667,
    D[2,2] = (5+6+0+8+9+0+0+0+0) / 9 = 3.1111.

    情况二
    ceil_mode=False, count_include_pad=False(计算时不包含零填充)
    avgpool2 = nn.AvgPool2d(kernel_size=3, stride=2, padding=1, ceil_mode=False, count_include_pad=False)

    y2 = avgpool2(x1)
    print(y2)

    # 打印结果
    '''
    tensor([[[[3., 4.],
              [6., 7.]]]])
    '''
    计算过程:
    输出形状= floor[(3 - 3 + 2) / 2] + 1 = 2,
    D[1,1] = (1+2+4+5) / 4 = 3,
    D[1,2] = (2+3+5+6) / 4 = 4,
    D[2,1] = (4+5+7+8) / 4 = 6,
    D[2,2] = (5+6+8+9) / 4 = 7.

    情况三
    ceil_mode=False, count_include_pad=False, divisor_override=2(将计算平均池化时的除数指定为2)
    avgpool3 = nn.AvgPool2d(kernel_size=3, stride=2, padding=1, ceil_mode=False, count_include_pad=False, divisor_override=2)

    y3 = avgpool3(x1)
    print(y3)

    # 打印结果
    '''
    tensor([[[[ 6.,  8.],
              [12., 14.]]]])
    '''
    计算过程:
    输出形状= floor[(3 - 3 + 2) / 2] + 1 = 2,
    D[1,1] = (1+2+4+5) / 2 = 6,
    D[1,2] = (2+3+5+6) / 2 = 8,
    D[2,1] = (4+5+7+8) / 2 = 12,
    D[2,2] = (5+6+8+9) / 2 = 14.

    情况四
    ceil_mode=True, count_include_pad=True, divisor_override=None(在计算输出的形状时向上取整)
    x2 = np.array([
                  [1,2,3,4],
                  [5,6,7,8],
                  [9,10,11,12],
                  [13,14,15,16]
                  ])
    x2 = torch.from_numpy(x2).reshape(1,1,4,4).float()
    avgpool4 = nn.AvgPool2d(kernel_size=3, stride=2, padding=1, ceil_mode=True)
    y4 = avgpool4(x2)
    print(y4)

    # 打印结果
    '''
    tensor([[[[ 1.5556,  3.3333,  2.0000],
              [ 6.3333, 11.0000,  6.0000],
              [ 4.5000,  7.5000,  4.0000]]]])
    '''
    计算过程:
    输出形状 = ceil[(4 - 3 + 2) / 2] + 1 = 3,
    D[1,1] = (0+0+0+0+1+2+0+5+6) / 9 = 1.5556,
    D[1,2] = (0+0+0+2+3+4+6+7+8) / 9 = 3.3333,

    2023022210325741.jpg

    2023022210325741.jpg


    D[1,3] = (0+0+4+0+8+0) / 6 = 2,
    D[2,1] = (0+5+6+0+9+10+0+13+14) / 9 = 6.3333,
    D[2,2] = (6+7+8+10+11+12+14+15+16) / 9 = 11,

    2023022210325742.jpg

    2023022210325742.jpg


    D[2,3] = (8+0+12+0+16+0) / 6 = 6,

    2023022210325743.jpg

    2023022210325743.jpg


    D[3,1] = (0+13+14+0+0+0) / 6 = 4.5,
    D[3,2] = (14+15+16+0+0+0) / 6 = 7.5,

    2023022210325744.jpg

    2023022210325744.jpg


    D[3,3] = (16+0+0+0) / 4 = 4.

    总结
    到此这篇关于Pytorch平均池化nn.AvgPool2d()使用的文章就介绍到这了,更多相关Pytorch平均池化nn.AvgPool2d()使用内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 11:26:05 | 显示全部楼层
    知足常乐77 2023-6-29 11:26:05 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-29 19:14:15 | 显示全部楼层
    十二音阶囤 2023-6-29 19:14:15 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 19:50:00 | 显示全部楼层
    幸福341 2023-6-29 19:50:00 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 10:03:39 | 显示全部楼层
    落败的青春阳落s 2023-6-30 10:03:39 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-30 10:29:37 | 显示全部楼层
    向往草原403 2023-6-30 10:29:37 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 11:46:43 | 显示全部楼层
    贰十岁装成熟装s 2023-6-30 11:46:43 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 17:52:59 | 显示全部楼层
    风来时狂放 2023-6-30 17:52:59 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-1 01:55:28 | 显示全部楼层
    我是的十八簿 2023-7-1 01:55:28 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-3 22:14:38 | 显示全部楼层
    素色流年783 2023-7-3 22:14:38 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表