keras学习记录——resnet为什么用averagepooling?


目录

keras学习记录——resnet为什么用averagepooling?

前言

一、池化层

二、为什么在resnet后加均值池化而不是最大池化?

三、实际测试

总结


前言

本篇主要讨论resnet最后的pooling层为什么用averagepooling,而不是maxpooling?

主要用实验来回答这个问题,另外讲解了averagepooling和maxpooling的优缺点,并做了一些猜测(科研需要猜测,哈哈)


 

一、池化层

主要分为两种:averagepooling和maxpooling。

最大池化提取边缘等“最重要”的特征,而平均池化提取的特征更加smoothly。对于图像数据,你可以看到差异。虽然两者都是出于同样的原因使用,但我认为max pooling更适合提取极端功能。平均池有时不能提取好的特征,因为它将全部计入并计算出平均值,这对于对象检测类型任务可能不好用。引自:最大池化和均值池化的优缺点

二、为什么在resnet后加均值池化而不是最大池化?

猜测1:提取全局信息时适用于averagepooling,如分类;而提取局部信息时适用maxpooling,如roi pooling。

猜测2:在pooling层后面直接接上全连接层,全连接层在训练时是比较容易过拟合的,而averagepooling可以起到正则化的作用,正好可以防止过拟合。

猜测3:resnet不是采用传统的连通层进行CNN分类,而是设置了一些特别的通路将特征相加起来,因此看起来平均或许能更好的提取所需特征。

三、实际测试

本博客使用本人之前的博客中提到的网络,若有兴趣请转keras学习记录——训练resnet模型对cifar10分类,分别以averagepooling和maxpooling做训练,得出实验数据。

图中0_acc和0_vla_acc分别为averagepooling对应的训练集和验证集的准确率,case0_acc和case0_vla_acc分别为maxpooling对应的训练集和验证集的准确率。由图可知,在resnet中averagepooling相较于maxpooling,效果要好。

keras学习记录——resnet为什么用averagepooling?


总结

学习了pooling相关的知识,记录下来,发现印象加深了好多,果然好记性不如好博客呀。

另外以后有机会测一下全局均值池化,可能效果比这两个更好。