对Pytorch中Tensor的各种池化操作解析

yipeiwu_com6年前Python基础

AdaptiveAvgPool1d(N)

对一个C*H*W的三维输入Tensor, 池化输出为C*H*N, 即按照H轴逐行对W轴平均池化

>>> a = torch.ones(2,3,4)
>>> a[0,1,2] = 0
>>>> a
tensor([[[1., 1., 1., 1.],
     [1., 1., 0., 1.],
     [1., 1., 1., 1.]],

    [[1., 1., 1., 1.],
     [1., 1., 1., 1.],
     [1., 1., 1., 1.]]])
     
>>> nn.AdaptiveAvgPool1d(5)(a)
tensor([[[1.0000, 1.0000, 1.0000, 1.0000, 1.0000],
     [1.0000, 1.0000, 0.5000, 0.5000, 1.0000],
     [1.0000, 1.0000, 1.0000, 1.0000, 1.0000]],

    [[1.0000, 1.0000, 1.0000, 1.0000, 1.0000],
     [1.0000, 1.0000, 1.0000, 1.0000, 1.0000],
     [1.0000, 1.0000, 1.0000, 1.0000, 1.0000]]])
     
>>> nn.AdaptiveAvgPool1d(1)(a)
tensor([[[1.0000],
     [0.7500],
     [1.0000]],

    [[1.0000],
     [1.0000],
     [1.0000]]])

AdaptiveAvgPool2d((M,N))

对一个B*C*H*W的四维输入Tensor, 池化输出为B*C*M*N, 即按照C轴逐通道对H*W平面平均池化

>>> a = torch.ones(2,2,3,4)
>>> a[:,:,:,1] = 0
>>> a
tensor([[[[1., 0., 1., 1.],
     [1., 0., 1., 1.],
     [1., 0., 1., 1.]],

     [[1., 0., 1., 1.],
     [1., 0., 1., 1.],
     [1., 0., 1., 1.]]],


    [[[1., 0., 1., 1.],
     [1., 0., 1., 1.],
     [1., 0., 1., 1.]],

     [[1., 0., 1., 1.],
     [1., 0., 1., 1.],
     [1., 0., 1., 1.]]]])
     
>>> nn.AdaptiveAvgPool2d((1,2))(a)
tensor([[[[0.5000, 1.0000]],
     [[0.5000, 1.0000]]],
     
    [[[0.5000, 1.0000]],
     [[0.5000, 1.0000]]]])
     
>>> nn.AdaptiveAvgPool2d(1)(a)
tensor([[[[0.7500]],
     [[0.7500]]],

    [[[0.7500]],
     [[0.7500]]]])

AdaptiveAvgPool3d((M,N,K))

对一个B*C*D*H*W的五维输入Tensor, 池化输出为B*C*M*N*K, 即按照C轴逐通道对D*H*W平面平均池化

>>> a = torch.ones(1,2,2,3,4)
>>> a[0,0,:,:,0:2] = 0
>>> a
tensor([[[[[0., 0., 1., 1.],
      [0., 0., 1., 1.],
      [0., 0., 1., 1.]],
      
     [[0., 0., 1., 1.],
      [0., 0., 1., 1.],
      [0., 0., 1., 1.]]],

     [[[1., 1., 1., 1.],
      [1., 1., 1., 1.],
      [1., 1., 1., 1.]],

     [[1., 1., 1., 1.],
      [1., 1., 1., 1.],
      [1., 1., 1., 1.]]]]])
     
>>> nn.AdaptiveAvgPool3d((1,1,2))(a)
tensor([[[[[0., 1.]]],

     [[[1., 1.]]]]])
     
>>> nn.AdaptiveAvgPool3d(1)(a)
tensor([[[[[0.5000]]],

     [[[1.0000]]]]])

以上这篇对Pytorch中Tensor的各种池化操作解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

在Python中通过threading模块定义和调用线程的方法

定义线程 最简单的方法:使用target指定线程要执行的目标函数,再使用start()启动。 语法: class threading.Thread(group=None, targe...

python处理两种分隔符的数据集方法

python处理两种分隔符的数据集方法

在做机器学习的时候,遇到这样一个数据集... 一共399行10列, 1-9列是用不定长度的空格分割, 第9-10列之间用'\t'分割, 前九列都是数值类型,其中第三列有若干个'?...

Django为窗体加上防机器人的验证码功能过程解析

Django为窗体加上防机器人的验证码功能过程解析

这里我们使用 django-simple-captcha 模块,官方介绍如下:https://github.com/mbi/django-simple-captcha 一键安装: p...

Python中模块与包有相同名字的处理方法

前言 在编程开发中,个人觉得,只要按照规范去做,很少会出问题。刚开始学习一门技术时,的确会遇到很多的坑。踩的坑多了,这是好事,会学到更多东西,也会越来越觉得按照规范做的重要性,规范的制定...

Python字符串处理实例详解

Python字符串处理实例详解 一、拆分含有多种分隔符的字符串 1.如何拆分含有多种分隔符的字符串 问题: 我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符,例...