РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
751 of 824 menu

Функция nn.dropout

Функция nn.dropout применяет механизм dropout к входному тензору. Первым параметром передается входной тензор, вторым - вероятность сохранения элемента rate (keep probability). Элементы, которые не были обнулены, масштабируются на 1 / rate, чтобы суммарное математическое ожидание тензора оставалось неизменным. Третьим параметром можно передать шум noise_shape, а четвертым - зерно генератора seed.

Синтаксис

tf.nn.dropout(x, rate, [noise_shape], [seed], [name])

Пример

Давайте применим dropout к тензору из единиц с вероятностью сохранения 0.5:

import tensorflow as tf tf.random.set_seed(0) t = tf.constant([1.0, 1.0, 1.0, 1.0, 1.0]) res = tf.nn.dropout(t, rate=0.5) print(res)

Результат выполнения кода:

tf.Tensor([2. 0. 2. 0. 2.], shape=(5,), dtype=float32)

Как видно из результата, элементы, которые остались, были умножены на 2 (то есть на 1 / 0.5), а остальные обнулены.

Пример

Давайте применим dropout к двумерному тензору с вероятностью сохранения 0.8:

import tensorflow as tf tf.random.set_seed(0) t = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) res = tf.nn.dropout(t, rate=0.8) print(res)

Результат выполнения кода:

tf.Tensor( [[1.25 2.5 0. ] [0. 6.25 0. ]], shape=(2, 3), dtype=float32)

Обратите внимание, что сохраненные элементы масштабируются на 1.25 (то есть на 1 / 0.8).

Пример

Давайте используем параметр noise_shape, чтобы dropout применялся только по определенным осям тензора:

<+python+> import tensorflow as tf tf.random.set_seed(0) t = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) res = tf.nn.dropout(t, rate=0.5, noise_shape=[2, 1]) print(res) <-python+>

Результат выполнения кода:

tf.Tensor( [[0. 0. 0.] [8. 10. 12.]], shape=(2, 3), dtype=float32)

В этом случае маска dropout имеет форму [2, 1] и применяется ко всей строке целиком: первая строка обнулилась полностью, а вторая - умножилась на 2.

Пример

Давайте применим dropout внутри слоя tf.keras.layers.Dropout для регуляризации модели:

import tensorflow as tf tf.random.set_seed(0) model = tf.keras.Sequential([ tf.keras.layers.Dense(4, activation='relu'), tf.keras.layers.Dropout(0.3), tf.keras.layers.Dense(1) ]) t = tf.constant([[1.0, 2.0, 3.0]]) res = model(t, training=True) print(res)

Результат выполнения кода:

tf.Tensor([[-0.5298233]], shape=(1, 1), dtype=float32)

При training=True слой Dropout активен, а при training=False он пропускает данные без изменений.

Смотрите также

  • функцию batch_normalization,
    которая нормализует активации слоя
  • функцию l2_normalize,
    которая выполняет L2-нормализацию по оси
  • функцию moments,
    которая вычисляет среднее и дисперсию
  • функцию softmax,
    которая применяет функцию softmax к логитам
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить