如何計算卷積層中對應參數個數?
05-20
如何計算卷積層中對應參數個數?
來自專欄 機器學習和計算機視覺
一、背景
這段時間在用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 |