keras學習記錄——resnet爲什麼用averagepooling?

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,效果要好。

圖片1


總結

學習了pooling相關的知識,記錄下來,發現印象加深了好多,果然好記性不如好博客呀。

另外以後有機會測一下全局均值池化,可能效果比這兩個更好。