Spec-Zone.ru › TensorFlow 2.9

tf.nn.experimental.stateless_dropout

Вычисляет дропаут: случайным образом обнуляет элементы, чтобы предотвратить переобучение.

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.nn.experimental.stateless_dropout

tf.nn.experimental.stateless_dropout(
    x, rate, seed, rng_alg=None, noise_shape=None, name=None
)

Дропаут полезен для регуляризации моделей нейронных сетей. Элементы входных данных случайным образом устанавливаются в ноль (а другие элементы масштабируются). Это побуждает каждый узел быть полезным независимо, поскольку он не может полагаться на выход других узлов.

Более точно: с вероятностью rate элементы x устанавливаются в 0. Остальные элементы масштабируются на 1.0 / (1 - rate), чтобы сохранить ожидаемое значение.

x = tf.ones([3,5])
tf.nn.experimental.stateless_dropout(x, rate=0.5, seed=[1, 0])
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[2., 0., 2., 0., 0.],
       [0., 0., 2., 0., 2.],
       [0., 0., 0., 0., 2.]], dtype=float32)>
x = tf.ones([3,5])
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[1, 0])
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
       [0., 0., 0., 0., 5.],
       [0., 0., 0., 0., 5.]], dtype=float32)>
tf.nn.experimental.stateless_dropout(x, rate=0.0, seed=[1, 0]) == x
<tf.Tensor: shape=(3, 5), dtype=bool, numpy=
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]])>

Эта функция является бессостоятельной версией tf.nn.dropout, в том смысле, что сколько бы раз вы ни вызывали эту функцию, одни и те же seed приведут к тем же результатам, а разные seed приведут к разным результатам.

x = tf.ones([3,5])
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[1, 0])
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
       [0., 0., 0., 0., 5.],
       [0., 0., 0., 0., 5.]], dtype=float32)>
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[1, 0])
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
       [0., 0., 0., 0., 5.],
       [0., 0., 0., 0., 5.]], dtype=float32)>
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[2, 0])
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
       [0., 0., 0., 5., 0.],
       [0., 0., 0., 0., 0.]], dtype=float32)>
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[2, 0])
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
       [0., 0., 0., 5., 0.],
       [0., 0., 0., 0., 0.]], dtype=float32)>

Сравните полученные результаты с результатами tf.nn.dropout ниже. При повторном вызове tf.nn.dropout с тем же seed, результат будет отличаться.

tf.random.set_seed(0)
x = tf.ones([3,5])
tf.nn.dropout(x, rate=0.8, seed=1)
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[0., 0., 0., 5., 5.],
       [0., 5., 0., 5., 0.],
       [5., 0., 5., 0., 5.]], dtype=float32)>
tf.nn.dropout(x, rate=0.8, seed=1)
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 5., 0.],
       [0., 0., 0., 0., 0.]], dtype=float32)>
tf.nn.dropout(x, rate=0.8, seed=2)
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[0., 0., 0., 0., 0.],
       [0., 5., 0., 5., 0.],
       [0., 0., 0., 0., 0.]], dtype=float32)>
tf.nn.dropout(x, rate=0.8, seed=2)
<tf.Tensor: shape=(3, 5), dtype=float32, numpy=
array([[0., 0., 0., 0., 0.],
       [5., 0., 5., 0., 5.],
       [0., 5., 0., 0., 5.]], dtype=float32)>

Разница между этой функцией и tf.nn.dropout аналогична разнице между tf.random.stateless_uniform и tf.random.uniform. См. руководство Генерация случайных чисел для подробного описания различных систем генерации случайных чисел в TF. Как указано в руководстве, устаревшие состоятельные операции генерации случайных чисел, такие как tf.random.uniform и tf.nn.dropout, пока не устарели, но их использование крайне не рекомендуется, потому что их состояние трудно контролировать.

По умолчанию каждый элемент сохраняется или удаляется независимо. Если noise_shape указан, он должен быть совместимым с трансляцией с формой x, и только размерности с noise_shape[i] == shape(x)[i] будут принимать независимые решения. Это полезно для удаления целых каналов из изображения или последовательности. Например:

x = tf.ones([3,10])
tf.nn.experimental.stateless_dropout(x, rate=2/3, noise_shape=[1,10],
                                     seed=[1, 0])
<tf.Tensor: shape=(3, 10), dtype=float32, numpy=
array([[3., 0., 0., 0., 0., 0., 0., 3., 0., 3.],
       [3., 0., 0., 0., 0., 0., 0., 3., 0., 3.],
       [3., 0., 0., 0., 0., 0., 0., 3., 0., 3.]], dtype=float32)>
Аргументы
x Числовой тензор с плавающей запятой.
rate Скалярный Tensor того же типа, что и x. Вероятность того, что каждый элемент будет отброшен. Например, установка rate=0.1 приведет к отбрасыванию 10% входных элементов.
seed Целочисленный тензор формы [2]. Seed для генерации случайных чисел.
rng_alg Алгоритм, используемый для генерации случайных чисел (по умолчанию "auto_select"). См. аргумент alg в tf.random.stateless_uniform для поддерживаемых значений.
noise_shape Целочисленный одномерный Tensor, представляющий форму для случайной генерации флагов сохранения/удаления.
name Имя данной операции.
Возвращаемые значения
Тензор той же формы и типа, что и x.
Исключения
ValueError Если rate не находится в [0, 1) или если x не является тензором с плавающей запятой. rate=1 запрещено, так как выход будет состоять только из нулей, что, скорее всего, не соответствует намерениям.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/nn/experimental/stateless_dropout

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API