Dropout

paddle.nn. Dropout ( p=0.5, axis=None, mode='upscale_in_train', name=None ) [源代码]

Dropout 是一种正则化手段,根据给定的丢弃概率 p,在训练过程中随机将一些神经元输出设置为 0,通过阻止神经元节点间的相关性来减少过拟合。论文请参考:Improving neural networks by preventing co-adaptation of feature detectors

在动态图模式下,请使用模型的 eval() 方法切换至测试阶段。

注解

对应的 functional 方法 请参考:dropout

参数

  • p (float,可选) - 将输入节点置为 0 的概率,即丢弃概率。默认值为 0.5。

  • axis (int|list|tuple,可选) - 指定对输入 Tensor 进行 Dropout 操作的轴。默认值为 None。

  • mode (str,可选) - 丢弃单元的方式,有 'upscale_in_train' 和 'downscale_in_infer' 两种可供选择,默认值为 'upscale_in_train'。计算方法如下:

    1. upscale_in_train(默认值),在训练时增大输出结果:

      • 训练时: \(out = input \times \frac{mask}{(1.0 - p)}\)

      • 预测时: \(out = input\)

    2. downscale_in_infer,在预测时减小输出结果:

      • 训练时: \(out = input \times mask\)

      • 预测时: \(out = input \times (1.0 - p)\)

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

形状

  • 输入 : N-D Tensor

  • 输出 : N-D Tensor,形状与输入相同。

代码示例

>>> import paddle
>>> paddle.seed(2023)

>>> x = paddle.to_tensor([[1, 2, 3], [4, 5, 6]], dtype="float32")
>>> m = paddle.nn.Dropout(p=0.5)

>>> y_train = m(x)
>>> print(y_train)
Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
[[2., 4., 0.],
 [8., 0., 0.]])

>>> m.eval()  # switch the model to test phase
>>> y_test = m(x)
>>> print(y_test)
Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
[[1., 2., 3.],
 [4., 5., 6.]])