從keras框架了解CNN網路的參數計算

簡單一個CNN模型:

# -*- coding: utf-8 -*-
from model import *
from data import *#導入這兩個文件中的所有函數
from keras.callbacks import TensorBoard,ModelCheckpoint
from keras.utils.vis_utils import plot_model #保存模型圖
from keras.utils import plot_model
import cv2
import os 
from keras.models import load_model

#os.environ["CUDA_VISIBLE_DEVICES"] = "0"
import keras
 
inputs=keras.Input(shape=(229,229,3),name='input111')
x=keras.layers.Conv2D(32,kernel_size=(3,3),strides=(2,2),padding='valid',name='Conv2D1')(inputs)
x=keras.layers.BatchNormalization(name='BN1')(x)
x=keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2),padding='valid',name='MaxPool1')(x)
 
x=keras.layers.Conv2D(64,kernel_size=(3,3),strides=(2,2),padding='valid',name='Conv2D2')(x)
x=keras.layers.BatchNormalization(name='BN2')(x)
x=keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2),padding='valid',name='MaxPool2')(x)
 
x=keras.layers.Conv2D(128,kernel_size=(3,3),strides=(2,2),padding='valid',name='Conv2D3')(x)
x=keras.layers.BatchNormalization(name='BN3')(x)
outputs=keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2),padding='valid',name='MaxPool3333')(x)
 
 
# model=keras.Model(inputs=inputs,outputs=outputs)
# model.summary()



activation = keras.layers.Activation('sigmoid', name='Classification')(x)
model = keras.Model(inputs=inputs, outputs=activation)

print(model.output_shape)
model.summary()

打印信息:

重點關注參數計算:

Total params: 94,144
Trainable params: 93,696   
Non-trainable params: 448    主要是BN層均值方差兩個參數,一個卷積覈對應一次BN。

順便講一下BN,若一張5*5的圖片經過卷積核3*3的卷積之後得到一張3*3的特徵圖。特徵圖就會包含了9個特徵值,這9個特徵值就是我們上面所提到的樣本。假設我們的batch-size設爲m,那麼就會有m*9個特徵值傳到BN層裏面作爲樣本來訓練參數γ和β。

輸出: 
1.這裏的K,在卷積網絡中可以看作是卷積核個數,如網絡中第n層有64個卷積核,就需要計算64次。 
   需要注意,在正向傳播時,會使用γ與β使得BN層輸出與輸入一樣。 
2.在反向傳播時利用γ與β求得梯度從而改變訓練權值(變量)。 
3.通過不斷迭代直到訓練結束,求得關於不同層的γ與β。
4.不斷遍歷訓練集中的圖片,取出每個batch_size中的γ與β,最後統計每層BN的γ與β各自的和除以圖片數量得到平均直,並對其  
 做無偏估計直作爲每一層的E[x]與Var[x]。 
5.在預測的正向傳播時,對測試數據求取γ與β,並使用該層的E[x]與Var[x],通過圖中11:所表示的公式計算BN層輸出。 
注意,在預測時,BN層的輸出已經被改變,所以BN層在預測的作用體現在此處。

參考:

https://blog.csdn.net/SPESEG/article/details/104465703#comments_12209996

https://blog.csdn.net/weixin_37985288/article/details/93318486

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章