Tensorflow2-tensorflow-keras-深度神經網絡(DNN)_批歸一化(batch normalization)

批標準化(批歸一化;batch normalize)

  • 將前章用到的標準化方法(Z-score, min-max等)在輸入數據進入每一層前皆進行標準化處理
    • 使神經網絡效果變好
      • 緩解梯度消失的問題
      • 計算量較大,速度變慢
    • keras.layers.BatchNormalization()
    • 以下方法可以自己試試看

先激活函數處理完在進行歸一化

1
2
3
4
5
6
7
model_with_bn = keras.models.Sequential()
model_with_bn.add(keras.layers.Flatten(input_shape=[28,28]))
for _ in range(20):
model_with_bn.add(keras.layers.Dense(100, activation="relu"))
model_with_bn.add(keras.layers.BatchNormalization())
else:
model_with_bn.add(keras.layers.Dense(10,activation="softmax"))

先進行歸一化後在進行激活函數處理

1
2
3
4
5
6
7
8
9
10
11
model_with_bn = keras.models.Sequential()
model_with_bn.add(keras.layers.Flatten(input_shape=[28,28]))
for _ in range(20):
# 先進行全連接但不激活
model_with_bn.add(keras.layers.Dense(100))
# 進行標準化
model_with_bn.add(keras.layers.BatchNormalization())
# 進行激活函數處理
model_with.bn.add(keras.layers.Activation("relu"))
else:
model_with_bn.add(keras.layers.Dense(10,activation="softmax"))

實現擁有批歸一化的深度神經網絡