如何計算CNN中batch normalization的計算複雜度(FLOPs)?

時間 2021-06-02 23:09:27

1樓:採石工

下面分析在推理 (或者說測試) 時 BN 層的計算量:

設 是BN層的輸入, 其尺寸為 ; 是BN層的moving mean, 是BN層的moving variance, 是BN層的scale, 是BN層的shift, 它們的尺寸均為 . 為了簡化推導, 設 , 並令 , , , , , . 則BN層的輸出的第k個通道為:

, 式中 是全1矩陣(而不是單位矩陣), 是乙個很小的正數, 防止除零的發生.

令 , 則 . 由於 都是已知的, 和 可以預先計算 (NCNN中就是這樣做的[1]), 在推理時不會占用額外的計算時間, 於是 的計算量只有 次乘法運算和 次加法運算, 對於C個通道計算量則有 次乘法運算和 次加法運算. 這個計算量相對於一般卷積層的計算量是很小的.

對於一般卷積則需要 次乘法運算, 次加法運算(有偏置項) 或 次加法運算(無偏置項), 這些符號可以顧名思義, 這裡就不贅述了, 詳細的推導可以參考[2].

另外如果網路採用Conv-BN-ReLU的設定, 則BN的引數還可以摺疊 (fold) 到前面的卷積層的引數中, 這時BN的計算被包含到卷積的計算中了.

CNN 網路應該如何設計?

霍華德 設原始影象為 維,卷積核尺寸為 在沒有padding和stride為1的情況下,輸出尺寸為 在有padding的情況下,padding尺寸為 輸出尺寸為 在有same padding的情況下,我們希望輸出尺寸與輸入尺寸一致,所以 所以我們可以看出,為了使得 取整數,我們需要使用奇數的卷積核尺...

請問CNN 中的 maxpool 到底是什麼原理,為什麼要取最大值,取最大值的原理是什麼?謝謝。

阿力阿哩哩 之前寫過一篇文章,正好回答一波。阿力阿哩哩 一文掌握CNN卷積神經網路一般來說,卷積層後面都會加乙個池化層,這時候大家又可以往上看看圖 4.9的CNN網路結構了,並且可以將它理解為對卷積層進一步特徵抽樣,池化層主要分為兩種,這時候筆者認為前面說了這麼多,現在給大家上一張圖,大家應該就明白...

如何評價 Facebook 新推出的 CNN 機器翻譯專案 Fairseq

深度學習於NLP 很多的trick,比較有想法。1 輸入端加入位置向量,2 層疊的CNN構成了hierarchical representation表示,底層的CNN捕捉相聚較近的詞之間的依賴關係,高層CNN捕捉較遠詞之間的依賴關係。通過層次化的結構,實現了類似RNN LSTM 捕捉長度在20個詞以...