pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作

作者:SZU_Hadooper 时间:2023-11-30 01:20:41 

F.avg_pool1d()数据是三维输入

input维度: (batch_size,channels,width)channel可以看成高度

kenerl维度:(一维:表示width的跨度)channel和输入的channel一致可以认为是矩阵的高度

假设kernel_size=2,则每俩列相加求平均,stride默认和kernel_size保持一致,越界则丢弃(下面表示1,2列和3,4列相加求平均)


input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=2)
m

tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[1.0000, 1.0000],
        [1.0000, 1.0000],
        [0.0000, 0.5000],
        [1.0000, 1.0000],
        [1.0000, 1.0000]]])

假设kenerl_size=3,表示前3列相加求平均,后面的不足3列丢弃


input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=3)
m
tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[1.],
        [1.],
        [0.],
        [1.],
        [1.]]])

input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=4)
m
tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[1.0000],
        [1.0000],
        [0.2500],
        [1.0000],
        [1.0000]]])

假设stride=1每次移动一个步伐


input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=2,stride=1)
m
tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[1.0000, 1.0000, 1.0000, 1.0000],
        [1.0000, 1.0000, 1.0000, 1.0000],
        [0.0000, 0.0000, 0.5000, 1.0000],
        [1.0000, 1.0000, 1.0000, 1.0000],
        [1.0000, 1.0000, 1.0000, 1.0000]]])

input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=4,stride=1)
m
tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[1.0000, 1.0000],
        [1.0000, 1.0000],
        [0.2500, 0.5000],
        [1.0000, 1.0000],
        [1.0000, 1.0000]]])

F.avg_pool2d()数据是四维输入

input维度: (batch_size,channels,height,width)

kenerl维度:(二维:表示width的跨度)channel和输入的channle一致,如果数据是三维,则channel为1.(如果只写一个数n,kenerl=(n,n))

stride默认和kenerl一致,这是个二维的,所以在height和width上均和kenerl一致,越界同样丢弃。

跟cnn卷积一致


input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input.size())
print(input)
m = F.avg_pool2d(input,kernel_size=(4,4))
m
torch.Size([1, 5, 5])
tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[0.8125]]])

input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input.size())
print(input)
m = F.avg_pool2d(input,kernel_size=(4,4),stride=1)
m
torch.Size([1, 5, 5])
tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[0.8125, 0.8750],
        [0.8125, 0.8750]]])

如果求列的平均kenerl=(1,5),此时默认stride=(1,5)


input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input.size())
print(input)
m = F.avg_pool2d(input,kernel_size=(1,5))
m
torch.Size([1, 5, 5])
tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[1.0000],
        [1.0000],
        [0.4000],
        [1.0000],
        [1.0000]]])

如果求行的平均kenerl=(5,1),此时默认stride=(5,1),用卷积的概念取思考


input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input.size())
print(input)
m = F.avg_pool2d(input,kernel_size=(5,1))
m
torch.Size([1, 5, 5])
tensor([[[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [0., 0., 0., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]])
tensor([[[0.8000, 0.8000, 0.8000, 1.0000, 1.0000]]])

对于四维的数据,channel默认和输入一致


input=torch.randn(10,3,4,4)
m=F.avg_pool2d(input,(4,4))
print(m.size())
torch.Size([10, 3, 1, 1])

补充:PyTorch中AdaptiveAvgPool函数解析

自适应池化(AdaptiveAvgPool1d):

对输入信号,提供1维的自适应平均池化操作 对于任何输入大小的输入,可以将输出尺寸指定为H*W,但是输入和输出特征的数目不会变化。


torch.nn.AdaptiveAvgPool1d(output_size)
#output_size:输出尺寸

对输入信号,提供1维的自适应平均池化操作 对于任何输入大小的输入,可以将输出尺寸指定为H*W,但是输入和输出特征的数目不会变化。


# target output size of 5
m = nn.AdaptiveAvgPool1d(5)
input = autograd.Variable(torch.randn(1, 64, 8))
output = m(input)

自适应池化(AdaptiveAvgPool2d):


class torch.nn.AdaptiveAvgPool2d(output_size)

对输入信号,提供2维的自适应平均池化操作 对于任何输入大小的输入,可以将输出尺寸指定为H*W,但是输入和输出特征的数目不会变化。

参数:

output_size: 输出信号的尺寸,可以用(H,W)表示H*W的输出,也可以使用耽搁数字H表示H*H大小的输出


# target output size of 5x7
m = nn.AdaptiveAvgPool2d((5,7))
input = autograd.Variable(torch.randn(1, 64, 8, 9))
# target output size of 7x7 (square)
m = nn.AdaptiveAvgPool2d(7)
input = autograd.Variable(torch.randn(1, 64, 10, 9))
output = m(input)

自适应池化的数学解释:

pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作

pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作

来源:https://blog.csdn.net/SZU_Hadooper/article/details/100066199

标签:pytorch,F.avg,pool1d,F.avg,pool2d
0
投稿

猜你喜欢

  • MySQL中查询字段为空或者为null的方法

    2024-01-24 01:42:21
  • 一个有趣的SQL命题 用一条语句切换BIT型的真假值

    2024-01-24 04:57:38
  • Python 迭代器Iterator详情

    2021-10-12 07:01:42
  • 设计MySQL数据库的技巧

    2009-09-06 11:56:00
  • python常见的占位符总结及用法

    2023-10-11 10:39:58
  • C#编码好习惯小结

    2024-05-02 17:20:20
  • IE的有条件注释详解(附实例代码)

    2009-03-31 13:01:00
  • 使用python怎样产生10个不同的随机数

    2021-08-12 13:07:18
  • Python多进程分块读取超大文件的方法

    2023-12-07 02:19:28
  • Python开发常用的一些开源Package分享

    2022-12-10 22:00:11
  • 十一个案例带你吃透Python函数参数

    2021-07-02 08:11:12
  • javaScript 删除字符串空格多种方法小结

    2024-05-02 16:10:33
  • MYSQL 字符串操作

    2008-11-13 12:34:00
  • Python特效之数字成像方法详解

    2022-09-12 13:16:22
  • 最新解决没有NVSMI文件夹以及nvidia-smi‘ 不是内部或外部命令也不是可运行的程序或批处理文件

    2023-03-26 18:13:34
  • Tensorflow 实现分批量读取数据

    2023-09-23 23:04:44
  • 解决golang中container/list包中的坑

    2024-05-21 10:25:42
  • python记录程序运行时间的三种方法

    2023-08-25 03:12:19
  • 使用Python制作自动推送微信消息提醒的备忘录功能

    2023-02-26 18:19:40
  • 在ASP.NET 2.0中操作数据之五十:为GridView控件添加Checkbox

    2023-06-26 19:18:09
  • asp之家 网络编程 m.aspxhome.com