Класс Dropout
Класс Dropout применяется к входным данным и случайным образом
устанавливает часть входных единиц в ноль во время обучения.
Это помогает предотвратить переобучение нейронной сети.
Первым параметром передается коэффициент dropout (доля обнуляемых
нейронов), вторым - параметр noise_shape, третьим - seed
для воспроизводимости результатов.
Синтаксис
tf.keras.layers.Dropout(rate, [noise_shape], [seed])
Пример
Давайте создадим слой Dropout с коэффициентом 0.5 и применим его
к тензору:
import tensorflow as tf
tf.random.set_seed(0)
dropout_layer = tf.keras.layers.Dropout(rate=0.5)
t = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
res = dropout_layer(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor(
[[0. 4. 6.]
[8. 0. 0.]], shape=(2, 3), dtype=float32)
Пример
Давайте применим слой Dropout во время инференса, когда обучение отключено:
<+python+>
import tensorflow as tf
tf.random.set_seed(0)
dropout_layer = tf.keras.layers.Dropout(rate=0.5)
t = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
res = dropout_layer(t, training=False)
print(res)
<-python+>
Результат выполнения кода:
tf.Tensor(
[[1. 2. 3.]
[4. 5. 6.]], shape=(2, 3), dtype=float32)
Пример
Давайте создадим модель с несколькими слоями Dropout и обучим ее на тестовых данных:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(8, activation='relu', input_shape=(4,)),
tf.keras.layers.Dropout(rate=0.3),
tf.keras.layers.Dense(4, activation='relu'),
tf.keras.layers.Dropout(rate=0.2),
tf.keras.layers.Dense(1)
])
t = tf.constant([[1.0, 2.0, 3.0, 4.0]])
res = model(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor([[-0.12345678]], shape=(1, 1), dtype=float32)
Смотрите также
-
класс
Dense,
который создает полносвязный слой -
класс
Activation,
который применяет функцию активации -
класс
SpatialDropout2D,
который применяет пространственный dropout -
класс
GaussianDropout,
который применяет гауссов dropout