PyTorch中BatchNorm1d的输出与手动标准化输入尺寸的输出不匹配

时间:2018-02-26 15:32:28

标签: machine-learning batch-normalization pytorctl

为了理解BatchNorm1d在PyTorch中是如何工作的,我尝试在2D张量上匹配BatchNorm1d操作的输出并手动将其标准化。手动输出似乎缩小了0.9747倍。这是代码(请注意,仿射设置为false):

import torch
import torch.nn as nn
from torch.autograd import Variable

X = torch.randn(20,100) * 5 + 10
X = Variable(X)

B = nn.BatchNorm1d(100, affine=False)
y = B(X)

mu = torch.mean(X[:,1])  
var_ = torch.var(X[:,1])
sigma = torch.sqrt(var_ + 1e-5)
x = (X[:,1] - mu)/sigma
#the ration below should be equal to one
print(x.data / y[:,1].data )

输出是:

0.9747
0.9747
0.9747
....

BatchNorm2d做同样的事情没有任何问题。 BatchNorm1d如何计算其输出?

1 个答案:

答案 0 :(得分:0)

找出原因。 mut self在计算方差时使用贝塞尔的校正。传递属性torch.var会给出相同的值。