tf.nn.dropout

View source on GitHub

Computes dropout: randomly sets elements to zero to prevent overfitting.

tf.nn.dropout(
    x, rate, noise_shape=None, seed=None, name=None
)

Note: The behavior of dropout has changed between TensorFlow 1.x and 2.x. When converting 1.x code, please use named arguments to ensure behavior stays consistent.

See also: tf.keras.layers.Dropout for a dropout layer.

Dropout is useful for regularizing DNN models. Inputs elements are randomly set to zero (and the other elements are rescaled). This encourages each node to be independently useful, as it cannot rely on the output of other nodes.

More precisely: With probability rate elements of x are set to 0. The remaining elemenst are scaled up by 1.0 / (1 - rate), so that the expected value is preserved.

>>> tf.random.set_seed(0)
>>> x = tf.ones([3,5])
>>> tf.nn.dropout(x, rate = 0.5).numpy()
array([[0., 0., 2., 2., 0.],
       [2., 0., 2., 2., 0.],
       [2., 2., 2., 0., 0.]], dtype=float32)
>>> tf.nn.dropout(x, rate = 0.8).numpy()
array([[0., 0., 5., 0., 0.],
       [0., 0., 5., 0., 0.],
       [5., 0., 0., 5., 0.]], dtype=float32)

If rate is set to 0 the input is returned, unchanged:

>>> tf.nn.dropout(x, rate = 0.0) is x
True

By default, each element is kept or dropped independently. If noise_shape is specified, it must be broadcastable to the shape of x, and only dimensions with noise_shape[i] == shape(x)[i] will make independent decisions. This is useful for dropping whole channels from an image or sequence. For example:

>>> x = tf.ones([3,10])
>>> tf.nn.dropout(x, rate = 2/3, noise_shape=[1,10]).numpy()
array([[0., 3., 0., 3., 0., 0., 3., 0., 0., 3.],
       [0., 3., 0., 3., 0., 0., 3., 0., 0., 3.],
       [0., 3., 0., 3., 0., 0., 3., 0., 0., 3.]], dtype=float32)

Args:

Returns:

A Tensor of the same shape of x.

Raises: