CNN 輸出尺寸計算工具

排列卷積神經網路(CNN)的各層,計算每一層輸出的大小、需要學習的參數數量,以及推論所需的乘積累加運算次數。可以用範例確認輸出尺寸的公式與參數的算法。

輸入與各層

conv K S P C=卷積(K×K 核、步幅 S、填充 P、輸出通道 C)/pool K S=最大值或平均池化(K×K、步幅 S)/flatten=攤平成一列/fc N=全連接(輸出 N)。# 之後為註解。

計算結果

最後一層的輸出
–
參數數量合計
–
乘積累加運算次數合計
–

高與寬的小數部分無條件捨去。乘積累加運算次數是推論一筆輸入時乘法與加法成組的次數,不含偏差的加法、啟動函數與池化的計算。

輸出尺寸的公式

卷積或池化輸出的高(寬也相同)為 ⌊(輸入 + 2 × 填充 − 核) ÷ 步幅⌋ + 1。它計算的是把核以步幅為單位在輸入上滑動時,不超出邊界能放置的位置數。在範例「對 28×28 圖像做 5×5 卷積與 2×2 池化」中,(28 − 5) ÷ 1 + 1 = 24,得到 24×24,接著步幅 2 的 2×2 池化為 (24 − 2) ÷ 2 + 1 = 12,因此是 12×12。若使用 3×3 核、填充 1、步幅 1,高與寬保持不變。

參數數量的算法

卷積層的權重,每個輸出通道有「核 × 核 × 輸入通道」個,另外每個輸出通道各有一個偏差。範例「LeNet-5」的第一層是 5 × 5 × 1 × 6 + 6 = 156 個。全連接層為「輸入數 × 輸出數 + 輸出數」,把 16 × 5 × 5 = 400 個值連到 120 個的層有 400 × 120 + 120 = 48,120 個。池化層與 flatten 沒有參數。LeNet-5 整體共有 61,706 個。

乘積累加次數與計算量

卷積層中,求出一個輸出值需要「核 × 核 × 輸入通道」次乘積累加,並對輸出的高 × 寬 × 通道數重複。在範例「VGG 的第一個區塊」中,只是對 224×224 圖像做兩次 3×3、64 通道的卷積,就需要約 19 億次乘積累加。參數多集中在全連接層,計算量則多集中在解析度較高的前段卷積層,這是 CNN 的典型樣貌。

卷積比全連接需要更少參數的原因

全連接層把所有輸入值與所有輸出值相連,若把 32×32 圖像以全連接接到 6 個 28×28 的輸出,約需 480 萬個權重。卷積層在圖像的每個位置都使用同一個小核(權重共享),只需 156 個。觀察鄰近像素之間關係的局部性,以及位置偏移也能找到相同特徵的性質,是 CNN 適合處理圖像的原因。

練習相關題目

輸入為64個、輸出為32個的全連接層(每個輸出各有1個偏差),可訓練的參數數量為何者?

  1. A96
  2. B2048
  3. C2080
查看答案與解析

正確答案:C. 2080

全連接層中,每一組輸入與輸出都有一個權重,因此權重為 64 × 32 = 2048個。再加上每個輸出各1個、共32個偏差,參數為 2048 + 32 = 2080個。一般而言,輸入n個、輸出m個的全連接層,參數為 (n + 1) × m 個。卷積層在整張影像上重複使用相同的濾波器,因此即使輸入大小相同,參數也比全連接層少得多。

對28×28的單通道影像,以5×5的濾波器進行卷積(步幅1、不填充),接著進行2×2的最大池化(步幅2)。輸出的高與寬為何者?

  1. A12×12
  2. B14×14
  3. C24×24
查看答案與解析

正確答案:A. 12×12

卷積輸出的大小,以輸入大小為N、濾波器大小為F、填充為P、步幅為S,可由 (N + 2P − F) ÷ S + 1 求得。(28 + 0 − 5) ÷ 1 + 1 = 24,因此卷積後為24×24。以步幅2進行2×2的最大池化時,每個2×2區域只保留一個最大值,因此高與寬減半,成為12×12。池化沒有可訓練的參數,具有縮小資料以減少計算量,並使網路不易受位置微小偏移影響的作用。

常見問題

填充與步幅的用途是什麼?

填充是在輸入周圍補上 0 等值,避免輸出縮得太快,並讓邊緣的像素和中央一樣被使用。步幅是核移動的間隔,設為 2 時高與寬約減半,可代替池化用來降低解析度。

除不盡時會怎樣?

公式中除法的小數部分無條件捨去。例如對高 7 做核 2、步幅 2 的池化,(7 − 2) ÷ 2 + 1 = 3.5,輸出為 3,最後一列不會被使用。有些框架也提供無條件進位的設定,或自動填充使輸出等於輸入 ÷ 步幅的設定(same)。

從乘積累加次數能知道推論時間嗎?

可以當作參考。一次乘積累加常算成兩次運算(FLOP),19 億次乘積累加約為 3.9 GFLOP。不過實際時間會因從記憶體讀寫權重與中間結果的量,以及硬體的平行度而有很大差異。

考試與課程中會怎麼出題?

深度學習的課程、面試與證照考試常要求由輸入大小、核、步幅、填充求出輸出大小,或計算卷積層與全連接層的參數數量。

相關用語

卷積神經網路(CNN) 啟動函數(Activation function)

相關計算工具

半導體、電子電路與資訊計算工具 →