如何計算卷積層中對應參數個數?

如何計算卷積層中對應參數個數?

來自專欄 機器學習和計算機視覺

一、背景

這段時間在用Keras搭建卷積神經網路中,發現Keras可以自行計算出每層中對應參數的數量,對此計算過程我比較好奇:

二、問題以及解決方案

2.1 問題環境描述

有一張224*224大小的圖片,第一層就為卷基層,代碼如下:

from keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2Dfrom keras.layers import Dropout, Flatten, Densefrom keras.models import Sequentialmodel = Sequential()model.add(Conv2D(16,(2,2),input_shape=(224,224,3)))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dense(133))model.summary()

最終統計結果如下:

這裡先拋出卷積層中卷積核操作動態圖:

2.2 第一層(卷積層)的參數個數計算

先整理以下此環境中對應的數據信息

  • 信息列表
    • Filter個數:32
    • 原始圖像shape:224*224*3
    • 卷積核大小為:2*2
  • 一個卷積核的參數:

    2*2*3=12

  • 16個卷積核的參數總額:

    16*12 + 16 =192 + 16 = 208

weight * x + bias根據這個公式,即可算的最終的參數總額為:208

2.3 第二層(池化層)的參數個數計算

很明顯,沒有嘛。不清楚的,去看看池化層到底是啥玩意兒!

2.4 第三層(全連接層)的參數個數計算

第二層池化層的輸出為:(111*111*16),從第一層到第二層,只是圖片大小發生了變化,深度沒有發生變化,而Dense對應的神經元個數為133個,那麼還是根據公式:weight * x + bias,計算得:133*16+133=2261

三、總結

在卷積層中,每個卷積核都能夠學習到一個特徵,那麼這個特徵其實就是卷積核對應學習到的參數:矩陣中每個單元weight,以及整個卷積核對應的一個bias

解決這個問題最根本還是需要理解最本質的一個公式:weight * x + bias

推薦閱讀:

TAG:機器學習 | 深度學習DeepLearning | 卷積神經網路CNN |