chainer.functions.dropout

chainer.functions.dropout(x, ratio=.5, *, mask=None, return_mask=False)[source]

Drops elements of input variable randomly.

This function drops input elements randomly with probability ratio and scales the remaining elements by factor 1 / (1 - ratio). In testing mode (i.e., chainer.config.train is set to False), it does nothing and just returns x.

Warning

train argument is not supported anymore since v2. Instead, use chainer.using_config('train', boolean). See chainer.using_config().

Parameters:
  • x (Variable or numpy.ndarray or cupy.ndarray) – Input variable. A \((s_1, s_2, ..., s_N)\) -shaped float array.
  • ratio (float) – Dropout ratio. The ratio must be 0.0 <= ratio < 1.0.
  • mask (ndarray or None) – The mask to be used for dropout. You do not have to specify this value, unless you need to make results deterministic. If mask is not specified or set to None, a mask will be generated randomly according to the given ratio. If mask is specified, ratio will be ignored. The shape and dtype must be the same as x and should be on the same device. Note that iDeep and cuDNN will not be used for this function if mask is specified, as iDeep and cuDNN do not support it.
  • return_mask (bool) – If True, the mask used for dropout is returned together with the output variable. The returned mask can later be reused by passing it to mask argument.
Returns:

When return_mask is False (default), returns the output variable. When True, returns the tuple of the output variable and mask (ndarray). The mask will be on the same device as the input. The mask will become None when chainer.config.train is set to False.

Return type:

Variable or tuple

See the paper by G. Hinton: Improving neural networks by preventing co-adaptation of feature detectors.

Example

>>> x = np.array([[-1, 0], [2, -3], [-2, 1]], np.float32)
>>> with chainer.using_config('train', True):
...     y = F.dropout(x)
>>> y.data
array([[-2.,  0.],
       [ 4., -6.],
       [-0.,  2.]], dtype=float32)
>>> with chainer.using_config('train', True):
...     y = F.dropout(x, ratio=0.0) # dropout returns original input if ratio=0.0
>>> (x == y.data).all()
True
>>> with chainer.using_config('train', False):
...     y = F.dropout(x) # dropout in test mode returns original input
>>> (x == y.data).all()
True