pytorch 學習 | 全局平均池化 global average pooling 實現 和作用優點解析

pytorch 實現

在一些論文中,我們可能會看到全局平均池化操作,但是我們從pytorch官方文檔中卻找不到這個API,那我們應該怎麼辦?
答案是:
利用現有的pooling API實現全局平均池化的效果。

首先我們簡單理解全局平均池化操作。
如果有一批特徵圖,其尺寸爲 [ B, C, H, W], 我們經過全局平均池化之後,尺寸變爲[B, C, 1, 1]。
也就是說,全局平均池化其實就是對每一個通道圖所有像素值求平均值,然後得到一個新的1 * 1的通道圖。

明白這個思路之後,我們就可以很容易實現全局平均池化了。

利用自適應平均池化就可以快速實現。或者自適應最大池化也可以,一樣。

In [1]: import torch

In [2]: a = torch.rand([4,3,4,4])

In [3]: a.size()
Out[3]: torch.Size([4, 3, 4, 4])

In [4]: b = torch.nn.functional.adaptive_avg_pool2d(a, (1,1))  # 自適應池化,指定池化輸出尺寸爲 1 * 1

In [5]: b.size()
Out[5]: torch.Size([4, 3, 1, 1])

作用和優點

首次提出全局平均池化概念的論文是:Network In Network, 作用和優點什麼的,都講的很清楚。
在這裏插入圖片描述
簡單轉譯一下,就是:

  • 作用:如果要預測K個類別,在卷積特徵抽取部分的最後一層卷積層,就會生成K個特徵圖,然後通過全局平均池化就可以得到 K個1×1的特徵圖,將這些1×1的特徵圖輸入到softmax layer之後,每一個輸出結果代表着這K個類別的概率(或置信度 confidence),起到取代全連接層的效果
  • 優點:
    • 和全連接層相比,使用全局平均池化技術,對於建立特徵圖和類別之間的關係,是一種更樸素的卷積結構選擇。
    • 全局平均池化層不需要參數,避免在該層產生過擬合。
    • 全局平均池化對空間信息進行求和,對輸入的空間變化的魯棒性更強。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章