畳み込みニューラルネットワークでのbatch normalizationの軸

Andrew Ng先生によるdeep learning講座の中で遭遇した問題

 

m : バッチのサンプル数

(n_H,n_W) : 縦横のセルの数

n_C : チャンネル数


    X.shape = (m,n_H,n_W,n_C)

という形のテンソル畳み込み層から受け取って、activationに放り込む前にbatch normalization(以下BN)をするのですが、normalizationは当然axis=0で行われるものと思っていたら


    # CONV -> BN -> RELU Block applied to X
    X = Conv2D(32, (7, 7), strides = (1, 1), name = 'conv0')(X)
    X = BatchNormalization(axis = 3, name = 'bn0')(X)
    X = Activation('relu')(X)

え、チャンネル方向にとるんですか...!?ってなりました。

そういうBNもあるのかな...名前被ってるのかな...って不安になりました。結論から言うと

  1. 畳み込み層後のBNは(n_H,n_W)方向にも潰す
  2. kerasのBatchNormalizationのaxisは、潰さない方向を指定する

という訳でした。

参考URL:

 

stackoverflow.com

 

stackoverflow.com

Stackoverflowさまさまです。