Класс BatchNormalization
Класс BatchNormalization выполняет нормализацию
активаций предыдущего слоя по каждому мини-батчу.
Это стабилизирует обучение и позволяет использовать
более высокие скорости обучения. Слой принимает
входные данные и возвращает нормализованные значения.
Первым параметром можно передать функцию активации,
вторым - момент для скользящего среднего, третьим -
параметр epsilon для численной стабильности.
Синтаксис
tf.keras.layers.BatchNormalization(
axis=-1,
momentum=0.99,
epsilon=0.001,
center=True,
scale=True
)
Пример
Давайте создадим слой нормализации батчей и применим его к тензору:
import tensorflow as tf
layer = tf.keras.layers.BatchNormalization()
t = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
res = layer(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor(
[[-1.2247449 -1.2247449]
[ 0. 0. ]
[ 1.2247449 1.2247449]], shape=(3, 2), dtype=float32)
Пример
Давайте используем слой в модели с указанием
функции активации relu:
<+python+>
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(4, input_shape=(3,)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Activation('relu')
])
t = tf.constant([[1.0, 2.0, 3.0]])
res = model(t, training=True)
print(res)
<-python+>
Результат выполнения кода:
tf.Tensor(
[[0. 0.29474723 0. 0. ]], shape=(1, 4), dtype=float32)
Пример
Давайте проверим состояние слоя после обучения - среднее и дисперсию, накопленные за время работы:
import tensorflow as tf
layer = tf.keras.layers.BatchNormalization()
t = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
_ = layer(t, training=True)
print(layer.moving_mean)
print(layer.moving_variance)
Результат выполнения кода:
<tf.Variable 'moving_mean:0' shape=(2,) dtype=float32, numpy=array([0.06, 0.08], dtype=float32)>
<tf.Variable 'moving_variance:0' shape=(2,) dtype=float32, numpy=array([0.9404, 0.9608], dtype=float32)>
Смотрите также
-
класс
LayerNormalization,
который нормализует активации по признакам -
класс
GroupNormalization,
который делит каналы на группы для нормализации -
класс
Dropout,
который случайно отключает нейроны при обучении -
класс
Dense,
который создает полносвязный слой