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 结语
通过五千次定量循环实验发现,自适应最大值池化和两种自定义池化的效率排序为:最大值池化 ≈ 均值池化 > 自适应池化。