Класс GaussianNoise
Класс GaussianNoise применяется к данным
в качестве слоя нейронной сети. Во время
обучения слой добавляет к входному тензору
случайный шум, распределенный по нормальному
закону с нулевым средним. Первым параметром
передается стандартное отклонение stddev,
которое задает интенсивность шума. Во время
инференса шум не добавляется, поэтому слой
действует как тождественное преобразование.
Такой слой помогает регуляризовать модель и снижает риск переобучения, делая сеть более устойчивой к небольшим искажениям входных данных. Шум добавляется только на этапе обучения, что важно учитывать при построении и оценке модели.
Синтаксис
tf.keras.layers.GaussianNoise(stddev, **kwargs)
Пример
Давайте создадим слой шума с отклонением
0.1 и применим его к тензору:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.GaussianNoise(0.1)
t = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0])
res = layer(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor([1.0692536 2.0498471 3.030734 3.9683185 4.995864 ], shape=(5,), dtype=float32)
Пример
Давайте сравним поведение слоя во время обучения и во время инференса:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.GaussianNoise(0.2)
t = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0])
train_res = layer(t, training=True)
infer_res = layer(t, training=False)
print(train_res)
print(infer_res)
Результат выполнения кода:
tf.Tensor([1.1385071 2.0996943 3.0614681 3.936637 4.991728 ], shape=(5,), dtype=float32)
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.Input(shape=(5,)),
tf.keras.layers.GaussianNoise(0.1),
tf.keras.layers.Dense(3)
])
t = tf.constant([[1.0, 2.0, 3.0, 4.0, 5.0]])
res = model(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor([[-0.07700163 0.26376718 -0.08461171]], shape=(1, 3), dtype=float32)
Смотрите также
-
слой
Dropout,
который случайно отключает нейроны во время обучения -
слой
GaussianDropout,
который умножает вход на гауссов шум -
слой
AlphaDropout,
который сохраняет среднее и дисперсию входных данных -
слой
ActivityRegularization,
который штрафует активность слоя