Класс GaussianDropout
Класс GaussianDropout представляет собой регуляризационный слой,
который во время обучения умножает входные данные на случайные значения,
распределенные по нормальному закону. В отличие от обычного дропаута,
который обнуляет часть нейронов, гауссов дропаут добавляет шум,
умножая каждое значение на коэффициент из нормального распределения
со средним 1 и стандартным отклонением
sqrt(rate / (1 - rate)).
Первым параметром слой принимает rate -
долю шума, которая должна быть меньше 1.
Вторым параметром можно передать словарь конфигурации слоя.
Синтаксис
tf.keras.layers.GaussianDropout(rate, **kwargs)
Пример
Давайте создадим слой гауссова дропаута с параметром
rate равным 0.2 и применим его к тензору:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.GaussianDropout(0.2)
t = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0])
res = layer(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor([1.0969818 2.294094 3.013296 4.1848783 5.284467 ], shape=(5,), dtype=float32)
Пример
Давайте применим слой к двумерному тензору в режиме обучения:
Результат выполнения кода:
tf.Tensor(
[[1.1579726 1.6473048 3.3312263]
[3.7846403 5.3058076 5.219204 ]], shape=(2, 3), dtype=float32)
Пример
Давайте проверим, что в режиме инференса слой не изменяет входные данные:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.GaussianDropout(0.2)
t = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0])
res = layer(t, training=False)
print(res)
Результат выполнения кода:
tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32)
Пример
Давайте встроим слой гауссова дропаута в последовательную модель:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(4, input_shape=(3,)),
tf.keras.layers.GaussianDropout(0.2),
tf.keras.layers.Dense(2)
])
t = tf.constant([[1.0, 2.0, 3.0]])
res = model(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor([[-0.23780262 0.5179831 ]], shape=(1, 2), dtype=float32)
Смотрите также
-
слой
Dropout,
который обнуляет часть входных данных -
слой
GaussianNoise,
который добавляет гауссов шум к входным данным -
слой
AlphaDropout,
который применяет дропаут, сохраняющий среднее и дисперсию -
слой
SpatialDropout2D,
который выполняет пространственный дропаут для двумерных карт признаков