1. 程式人生 > 其它 >1×1 卷積和Inception 網路

1×1 卷積和Inception 網路

1.11×1 卷積(Network in Network and 1×1 convolutions

輸入一張 6×6×1 的圖片,然後對它做卷積,起過濾器大小為 1×1×1,結果相當於把這個圖片乘以數字 2,但這僅僅是對於6×6×1 的一個通道圖片來說,1×1 卷積效果不佳。如果是一張 6×6×32 的圖片,那麼使用 1×1 過濾器進行卷積效果更好,具體來說,1×1 卷積所實現的功能是遍歷這 36 個單元格,計算左圖中 32 個數字和過濾器中 32 個數字的元素積之和,然後應用 ReLU 非線性函式。我們以其中一個單元為例,它是這個輸入層上的某個切片,用這 36 個數字乘以這個輸入層上 1×

1 切片,得到一個實數,像這樣把它畫在輸出中。這個 1×1×32 過濾器中的 32 個數字可以這樣理解,一個神經元的輸入是 32 個數字,即相同高度和寬度上某一切片上的 32個數字,這 32 個數字具有不同通道,乘以 32 個權重(將過濾器中的 32 個數理解為權重),然後應用 ReLU 非線性函式,在這裡輸出相應的結果。所以 1×1 卷積可以從根本上理解為對這 32 個不同的位置都應用一個全連線層,全連線層的作用是輸入 32 個數字(過濾器數量標記為nc[l+1],在這 36 個單元上重複此過程),輸出結果是 6×6×#filters(過濾器數量),以便在輸入層上實施一個非平凡(non-trivial
)計算。

1.2 Inception 網路簡介

構建卷積層時,你要決定過濾器的大小究竟是 1×1,,3×3 還是 5×5,或者要不要新增池化層。而 Inception 網路的作用就是代替你來決定,雖然網路架構因此變得更加複雜,但網路表現卻非常好。

這是你 28×28×192 維度的輸入層,Inception 網路或 Inception 層的作用就是代替人工來確定卷積層中的過濾器型別,或者確定是否需要建立卷積層或池化層。如果使用 1×1 卷積,輸出結果會是 28×28×#(某個值),假設輸出為 28×28×64,並且這裡只有一個層。如果使用 3×3 的過濾器,那麼輸出是 28×28×128。然後我們把第二個值堆積到第一個值

上,為了匹配維度,我們應用 same 卷積,輸出維度依然是 28×28,和輸入維度相同,即高度和寬度相同。如果用 5×5 過濾器或許會更好,輸出變成 28×28×32,我們再次使用 same 卷積,保持維度不變。如果你不想要卷積層,那就用池化操作,得到一些不同的輸出結果,我們把它也堆積起來,這裡的池化輸出是 28×28×32。為了匹配所有維度,我們需要對最大池化使用 padding,它是一種特殊的池化形式,因為如果輸入的高度和寬度為 28×28,則輸出的相應維度也是28×28。然後再進行池化,padding 不變,步幅為 1

有了這樣的 Inception 模組,你就可以輸入某個量,因為它累加了所有數字,這裡的最終輸出為 32+32+128+64=256Inception 模組的輸入為 28×28×192,輸出為 28×28×256。這就是 Inception 網路的核心內容

1.3 Inception 網路(Inception network

Inception 模組會將之前層的啟用或者輸出作為它的輸入,作為前提,這是一個28×28×192 的輸入,先通過一個 1×1的層,再通過一個 5×5 的層,1×1 的層可能有 16 個通道,而 5×5 的層輸出為 28×28×32,共32 個通道。為了在這個 3×3 的卷積層中節省運算量,你也可以做相同的操作,這樣的話 3×3 的層將會輸出 28×28×128。或許你還想將其直接通過一個 1×1 的卷積層,這時就不必在後面再跟一個 1×1 的層了,這樣的話過程就只有一步,假設這個層的輸出是 28×28×64。最後是池化層。為了能在最後將這些輸出都連線起來,我們會使用 same型別的 padding 來池化,使得輸出的高和寬依然是 28×28,這樣才能將它與其他輸出連線起來,在這過程中,把得到的各個層的通道都加起來,最後得到一個 28×28×256 的輸出,這就是一個 Inception 模組。

Inception 網路所做的就是將這些模組都組合到一起,最後組成了網路。

本文來自部落格園,作者:zhang-X,轉載請註明原文連結:https://www.cnblogs.com/YY-zhang/p/15075137.html