自适应池化最大值池化和均值池化效率的比较分析

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自适应池化最大值池化和均值池化效率的比较分析相关的知识,希望对你有一定的参考价值。

1 问题

我们在深度学习的过程中,我们学到了自适应池化、最大值池化和均值池化。那么,我们想要探究一下自适应池化、最大值池化和均值池化效率,哪一个更高?

2 方法

在之前的学习中,我们学到了自适应池化、最大值池化和均值池化,三种池化方式的运行速率的运行效率是如何的呢,我们使用对照实验将几种池化方式比较出来。

首先呢,我们先定义卷积层,直接转换输入的通道数:

conv = nn.Conv2d(

   in_channels=1,  # 输入为单通道灰度图

   out_channels=128,   # 输出为128通道img

   kernel_size=3,

   stride=1,

   padding=1

)  # [-, 16, 28, 28]

然后我们定义三种池化方式:

avg_pool = nn.AvgPool2d(    

   kernel_size=2,

   stride=28

)

max_pool = nn.MaxPool2d(    

   kernel_size=2,

   stride=28  

)  

adapt_max_pool = nn.AdaptiveMaxPool2d(

   output_size=1

)

在过后定义函数的调用

def stack_customized_max_pool(x):

   x = conv(x)

   out = max_pool(x)

   return out

def stack_customized_avg_pool(x):

   x = conv(x)

   out = avg_pool(x)

   return out

def stack_self_adapted(x):

   x = conv(x)

   out = adapt_max_pool(x)

return out

接着我们定义主函数:

if __name__ == '__main__':

   solution_list=[stack_customized_avg_pool,stack_customized_max_pool,stack_self_adapted]

   x = torch.rand(128, 1, 28, 28)

   for i in solution_list:

       start = time.time()

       for _ in range(5000):

           out = i(x)

       end = time.time()

       print(f'i的时间为:')

       print(end-start)

       print(out.shape)

最后打印结果为:

其中,自适应函数的运行原理为:

通过输入的output_size计算得到kernel_size、stride两个参数,padding参数默认为0。

计算公式如下:

3 结语

通过实验经过了许多次的定量循环实验,过程中我们也产生过了其他的方式,但是都没有这样的来得明显,再经过查阅了一定的资料,最终我们发现自适应最大值池化和两种自定义池化的效率为:最大值池化 ≈ 均值池化 > 自适应池化。

以上是关于自适应池化最大值池化和均值池化效率的比较分析的主要内容,如果未能解决你的问题,请参考以下文章

图像平均池化

Tensorflow 池化层(pooling)和全连接层(dense)

如何使用 numpy 在二维数组上执行最大/均值池化

神经网络笔记

上池化(unpooling),上采样(unsampling)和反卷积(deconvolution)的区别

神经网络——最大池化层的使用