畳み込みニューラルネットワークでの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もあるのかな...名前被ってるのかな...って不安になりました。結論から言うと
- 畳み込み層後のBNは(n_H,n_W)方向にも潰す
- kerasのBatchNormalizationのaxisは、潰さない方向を指定する
という訳でした。
参考URL:
Stackoverflowさまさまです。