【问题标题】:Output of BatchNorm1d in PyTorch does not match output of manually normalizing input dimensionsPyTorch 中 BatchNorm1d 的输出与手动归一化输入维度的输出不匹配
【发布时间】:2018-02-26 15:32:28
【问题描述】:

为了了解 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如何计算其输出?

【问题讨论】:

    标签: machine-learning batch-normalization pytorctl


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多