为什么 Pytorch Dropout 层会影响所有值,而不仅仅是设置为零的值?
Why is the Pytorch Dropout layer affecting all values, not only the ones set to zero?
Pytorch 的 dropout 层更改未设置为零的值。使用 Pytorch 的文档示例:(source):
import torch
import torch.nn as nn
m = nn.Dropout(p=0.5)
input = torch.ones(5, 5)
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.]])
然后我将它通过 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.]])
未设置为零的值现在为 2。为什么?
这就是 dropout 正则化的工作原理。在 dropout 之后,值除以保持概率(在本例中为 0.5)。
由于 PyTorch Dropout 函数接收将神经元置零的概率作为输入,如果您使用 nn.Dropout(p=0.2)
这意味着它有 0.8 的机会保留。所以 table 上的值将是 1/(1-0.2).
这称为"inverted dropout technique",这样做是为了确保激活的预期值保持不变。
Pytorch 的 dropout 层更改未设置为零的值。使用 Pytorch 的文档示例:(source):
import torch
import torch.nn as nn
m = nn.Dropout(p=0.5)
input = torch.ones(5, 5)
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.]])
然后我将它通过 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.]])
未设置为零的值现在为 2。为什么?
这就是 dropout 正则化的工作原理。在 dropout 之后,值除以保持概率(在本例中为 0.5)。
由于 PyTorch Dropout 函数接收将神经元置零的概率作为输入,如果您使用 nn.Dropout(p=0.2)
这意味着它有 0.8 的机会保留。所以 table 上的值将是 1/(1-0.2).
这称为"inverted dropout technique",这样做是为了确保激活的预期值保持不变。