oneflow.nn.Dropout

class oneflow.nn.Dropout(p: float = 0.5, inplace: bool = False, generator=None)

During training, randomly zeroes some of the elements of the input tensor with probability p using samples from a Bernoulli distribution. Each channel will be zeroed out independently on every forward call.

The documentation is referenced from: https://pytorch.org/docs/1.10/generated/torch.nn.Dropout.html.

This has proven to be an effective technique for regularization and preventing the co-adaptation of neurons as described in the paper “Improving neural networks by preventing co-adaptation of feature detectors”.

Furthermore, the outputs are scaled by a factor of \(\frac{1}{1-p}\) during training. This means that during evaluation the module simply computes an identity function.

Additionally, we can pass an extra Tensor addend which shape is consistent with input Tensor. The addend Tensor will be add in result after dropout, it is very useful in model’s residual connection structure.

Parameters
  • p – probability of an element to be zeroed. Default: 0.5

  • inplace – If set to True, will do this operation in-place. Default: False

  • generator – A pseudorandom number generator for sampling

Shape:
  • Input: \((*)\). Input can be of any shape

  • Output: \((*)\). Output is of the same shape as input

For example:

example 1:

>>> import numpy as np
>>> import oneflow as flow

>>> m = flow.nn.Dropout(p=0)
>>> arr = np.array(
...    [
...        [-0.7797, 0.2264, 0.2458, 0.4163],
...        [0.4299, 0.3626, -0.4892, 0.4141],
...        [-1.4115, 1.2183, -0.5503, 0.6520],
...    ]
... )
>>> x = flow.Tensor(arr)
>>> y = m(x)
>>> y 
tensor([[-0.7797,  0.2264,  0.2458,  0.4163],
        [ 0.4299,  0.3626, -0.4892,  0.4141],
        [-1.4115,  1.2183, -0.5503,  0.6520]], dtype=oneflow.float32)

example 2:

>>> import numpy as np
>>> import oneflow as flow

>>> m = flow.nn.Dropout(p=0)
>>> arr = np.array(
...    [
...        [-0.7797, 0.2264, 0.2458, 0.4163],
...        [0.4299, 0.3626, -0.4892, 0.4141],
...        [-1.4115, 1.2183, -0.5503, 0.6520],
...    ]
... )
>>> x = flow.Tensor(arr)
>>> addend = flow.ones((3, 4), dtype=flow.float32)
>>> y = m(x, addend=addend)
>>> y 
tensor([[ 0.2203,  1.2264,  1.2458,  1.4163],
        [ 1.4299,  1.3626,  0.5108,  1.4141],
        [-0.4115,  2.2183,  0.4497,  1.6520]], dtype=oneflow.float32)