为什么 Pytorch Dropout 层会影响所有值,而不仅仅是设置为零的值?

Nic*_*ais 2 python pytorch tensor dropout

Pytorch 的 dropout 层会更改未设置为零的值。使用 Pytorch 的文档示例:(来源):

import torch
import torch.nn  as nn

m = nn.Dropout(p=0.5)
input = torch.ones(5, 5)
Run Code Online (Sandbox Code Playgroud)
print(input)
tensor([[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]])
Run Code Online (Sandbox Code Playgroud)

然后我通过一个dropout层:

output = m(input)
print(output)
tensor([[0., 0., 2., 2., 0.],
        [2., 0., 2., 0., 0.],
        [0., 0., 0., 0., 2.],
        [2., 2., 2., 2., 2.],
        [2., 0., 0., 0., 2.]])
Run Code Online (Sandbox Code Playgroud)

未设置为零的值现在是 2。为什么?

Mig*_*uel 5

这就是 dropout 正则化的工作原理。在 dropout 之后,这些值除以保持概率(在这种情况下为 0.5)。

由于 PyTorch Dropout 函数接收将神经元归零的概率作为输入,如果您使用nn.Dropout(p=0.2)这意味着它有 0.8 的机会保留。所以表上的值将是 1/(1-0.2)。

这被称为“反向 dropout 技术”,这样做是为了确保激活的预期值保持不变。

  • 接近但不完全是。当`p=0.2`时,它给出`1/(1-0.2)`,所以`1.25`。如果是 5,则为“p=0.8”。 (2认同)