從 python 中 axis 參數直覺解釋 到 CNN 中 BatchNorm 的工作方式(Keras代碼示意)


1. python 中 axis 參數直覺解釋

網絡上的解釋很多,有的還帶圖帶箭頭.但在高維下是畫不出什么箭頭的.這里闡述了 axis 參數最簡潔的解釋.
假設我們有矩陣a, 它的shape是(4, 3), 如下:

import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9],
              [10, 11, 12]])
# a.shape = (4, 3)

要做如下不同維度求和操作:

# keepdims=True 保持了結果維度
s0 = np.sum(a, axis=0, keepdims=True)  # s0.shape = (1, 3)
s1 = np.sum(a, axis=1, keepdims=True)  # s1.shape = (4, 1)

觀察上面代碼,有:

  • a.shape = (4, 3), 這樣的話 axis 只能等於 0 or 1;(若 x.shape = (4, 4, 3), x 上的 axis 可以為 0 or 1 or 2)
  • 觀察 s0, 當 axis = 0 時, a.shape, (4, 3) 中的 4 將變成1, 其余維度不變化, 既 3 沒變;
  • 同樣觀察 s1, 當 axis = 1 時, a.shape, (4, 3) 中的 3 將變成1, 其余維度不變化, 既 4 沒變;

2. CNN 中 BatchNorm 的工作方式(Keras代碼示意)

假設 X 的 shape 為 (m, n_H_prev, n_W_prev, n_C_prev), 其中 m 為圖片樣本個數, n_H_prev, n_W_prev, n_C_prev 分別為 高,寬,通道數.

X = Conv2D(filters = 2, kernel_size = (3, 3), strides = (1,1), padding = 'valid', name = 'c1', kernel_initializer = glorot_uniform(seed=0))(X)
X = BatchNormalization(axis = 3, name = 'bn1')(X)
X = Activation('relu')(X)

上面代碼第一行:

  • 最右側的(X)假如是原始圖片集合,X.shape就是(m, n_H_prev, n_W_prev, n_C_prev);
  • 經過Conv2D處理后,既第一行最左邊的 X, 它的shape應該是(m, H, W, c = 2), (注意: H, W是根據原圖尺寸, kernel size 和 strides 算出來的, 具體值我們不寫了);

上面代碼第二行:

  • 最右側的(X)的shape是(m, H, W, c=2);
  • 要對最右側的(X)進行BN運算, 參數 axis=3, 指的就是數值為2的那個維度, 咋算呢?
  • step 1: 把(m=1, H=1, W=1, c=1)的那個點的數值和(m=1, H=1, W=1, c=2)的那個點的數值結合起來算均值和方差,然后再用相應公式對這兩個點做歸一化, 然后呢?
  • step 2: 把(m=1, H=1, W=2, c=1)的那個點的數值和(m=1, H=1, W=2, c=2)的那個點的數值結合起來算均值和方差,然后再用相應公式對這兩個點做歸一化, 然后呢?
  • step 3: 直到把圖片1處理完,既m=1處理完成. 然后呢?
  • 按照 step 1 to 3所述,把所有mini-batch圖片都處理完成, 假設m=100, 一個mini-batch有100個圖片.

BatchNorm只是歸一化特征圖內的數字,它不會改變特征圖的shape.

觀察我對第二行代碼的理解,發現了個事情:

  • BatchNorm作用於CNN時,是針對一個圖片,由不同的filter生成的特征圖所對應的點的歸一化!
  • 而BatchNorm作用於傳統的神經網絡時,是對不同樣本產生的Z的歸一化.比如對是對\(z_{3}^{[2]\{1\}}\)\(z_{3}^{[2]\{100\}}\) 的歸一化.其中假設了mini-batch=100, \([2]\)表示網絡第2層,下標3表示第二層第三個節點,\(\{1\}\)表示第一個樣本.
  • BatchNorm作用於CNN,與BatchNorm作用於傳統的神經網絡的工作方式是不同的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM