Pytorch的AvgPool2d函数

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import numpy as np
 
 
 
input = Variable(torch.Tensor([[[1, 3, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7]], [[1, 3, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7]]]))
print("input shape",input.shape)
c = F.avg_pool1d(input, kernel_size=3, stride=2)
print(c)
print("c shape:",c.shape)
 
# m = nn.AvgPool2d(3, stride=2)
m = nn.AvgPool2d((2, 2), stride=(2, 2))
input = Variable(torch.randn(20, 18, 50, 32))  # bach是20,图片size是50*31,chanel是18(通道是18,也就是每张图有18个fature map)
input = np.array([[[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]],
                   [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]],
                  [[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]],
                   [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]]])  #size2*2*4*4
print("input shape:",input.shape)
input = Variable(torch.FloatTensor(input))
output = m(input)
print(output)
print("output shape:",output.shape)#(2,2,2,2)

输出:

input shape torch.Size([2, 2, 7])
tensor([[[ 2.3333,  4.0000,  6.0000],
         [ 2.0000,  4.0000,  6.0000]],
 
        [[ 2.3333,  4.0000,  6.0000],
         [ 2.0000,  4.0000,  6.0000]]])
c shape: torch.Size([2, 2, 3])
input shape: (2, 2, 4, 4)
tensor([[[[ 1.5000,  3.5000],
          [ 1.5000,  3.5000]],
 
         [[ 1.5000,  3.5000],
          [ 1.5000,  3.5000]]],
 
 
        [[[ 1.5000,  3.5000],
          [ 1.5000,  3.5000]],
 
         [[ 1.5000,  3.5000],
          [ 1.5000,  3.5000]]]])
output shape: torch.Size([2, 2, 2, 2])

pytorch中的F.avg_pool1d()平均池化操作作用于一维,input的维度是三维比如[2,2,7]。F.avg_pool1d()中核size是3,步长是2表示每三个数取平均,每隔两个数取一次.比如[1,3,3,4,5,6,7]安照3个数取均值,两步取一次,那么结果就是[ 2.3333 ,4 ,6 ],也就是核是一维的,也只作用于一个维度。按照池化操作计算公式input size为[2,2,7],kernel size为3,步长为2,则输出维度计算(7-3)/2+1=3所以输出维度是[2,2,3],这与输出结果是一致的。

pytorch中的F.avg_pool2d(),input是维度是4维如[2,2,4,4],表示这里批量数是2也就是两张图像,这里应该是有通道(feature map)数量是2,图像是size是4*4的.核size是(2,2)步长是(2,2)表示被核覆盖的数取平均,横向纵向的步长都是2.那么核是二维的,所以取均值时也是覆盖二维取的。输出中第一个1.5的计算是:1+2+1+2/4=1.5.表示第一张图像左上角的四个像素点的均值。按照池化操作计算公式input size为[2,2,4,4],kernel size为2*2,步长为2,则输出维度计算(4-2)/2+1=2所以输出维度是[2,2,2,2],这与输出结果是一致的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorchavgpool2d是一个用于平均池化操作的函数。平均池化是一种降低图像尺寸并保留主要特征的方法。 在PyTorch中,avgpool2d函数的使用方式如下: ``` torch.nn.functional.avg_pool2d(input, kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None) ``` - input: 输入的张量,形状为(N, C, H, W),其中N是batch大小,C是通道数,H是高度,W是宽度。 - kernel_size: 池化窗口的大小,可以是单个整数来表示正方形窗口,或者是一个元组来表示不同的高度和宽度。 - stride: 池化步幅的大小。默认值为kernel_size。 - padding: 输入的每一条边补充0的层数。 - ceil_mode: 当为True时,进行上取整,当为False时,进行下取整。 - count_include_pad: 计算池化时是否包括填充的0。 - divisor_override: 默认值为None,如果指定了值,将覆盖计算池化区域大小的除数。 例如,如果我们有一个输入张量shape为(1, 1, 4, 4),池化窗口大小为2x2,步幅为2,填充为0,那么我们可以使用avgpool2d进行平均池化操作: ```python import torch import torch.nn.functional as F input = torch.tensor([[[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]]]) output = F.avg_pool2d(input, kernel_size=2, stride=2, padding=0) print(output) ``` 输出结果为: ``` tensor([[[[ 3.5000, 5.5000], [11.5000, 13.5000]]]]) ``` 在这个例子中,输入经过2x2的平均池化后,输出的张量形状变为(1, 1, 2, 2),计算过程是将每个2x2的窗口内的数值求平均。 总结来说,PyTorchavgpool2d函数可以对输入张量进行二维平均池化操作,通过指定池化窗口的大小、步幅、填充等参数来实现不同的降维效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值