I am trying to use nn.Dropout to drop some of the weights in trained network.
I expected this to result in zero-ing out some of the entries, but I also observe changes in numerical values:
params = [p for n, p in model.named_parameters() if 'features' not in n and len(p.shape) > 1]
for par in params:
    par = par.detach()
    par = torch.nn.Dropout2d(p=0.3)(par)

Before dropout:
tensor([[ 0.0022,  0.0041,  0.0004,  …, -0.0026, -0.0028, -0.0021],
[ 0.0007,  0.0015,  0.0021,  …,  0.0040,  0.0016,  0.0015],
[ 0.0007,  0.0005,  0.0021,  …, -0.0049, -0.0026,  0.0008],
…,
[-0.0003, -0.0022, -0.0003,  …,  0.0001,  0.0012, -0.0007],
[ 0.0033,  0.0045,  0.0018,  …, -0.0020, -0.0036,  0.0007],
[ 0.0031,  0.0045,  0.0015,  …, -0.0022, -0.0012, -0.0007]],
requires_grad=True)
After dropout:
tensor([[ 0.0000,  0.0059,  0.0006,  …, -0.0037, -0.0000, -0.0030],
[ 0.0011,  0.0021,  0.0030,  …,  0.0057,  0.0000,  0.0021],
[ 0.0000,  0.0000,  0.0030,  …, -0.0070, -0.0038,  0.0000],
…,
[-0.0000, -0.0032, -0.0004,  …,  0.0000,  0.0000, -0.0010],
[ 0.0047,  0.0065,  0.0026,  …, -0.0029, -0.0000,  0.0010],
[ 0.0000,  0.0065,  0.0021,  …, -0.0031, -0.0018, -0.0009]])
Why does it happen?