BatchNormallization是神经网络中的一个正则化技术,可以加速网络的收敛,并且在一定程度上解决深度网络“梯度弥散”的问题。它本是数据预处理的一种方法,google的研究人员将它应用在了神经网络中。论文地址:https://arxiv.org/abs/1502.03167
理论
pytorch batch normalization: http://pytorch.org/docs/master/nn.html#normalization-layers
对于输入
其中如果
实验
>>> import torch
>>> import torch.nn as nn
>>>> from torch.autograd import Variable
>>> bn=nn.BatchNorm1d(3);
>>>> bn.weight
Parameter containing:
0.8645
0.9457
0.2024
[torch.FloatTensor of size 3]
>>> bn.bias
Parameter containing:
0
0
0
[torch.FloatTensor of size 3]
>>> bn.weight=nn.Parameter(torch.Tensor([1,1,1]));
>>>> bn.weight
Parameter containing:
1
1
1
[torch.FloatTensor of size 3]
>>> bn(Variable(torch.Tensor([[1,2,3],[2,3,4]])))
Variable containing:
-1.0000 -1.0000 -1.0000
1.0000 1.0000 1.0000
[torch.FloatTensor of size 2x3]
>>> bn.weight=nn.Parameter(torch.Tensor([1,2,3]))
>>> bn(Variable(torch.Tensor([[1,2,3],[2,3,4]])))
Variable containing:
-1.0000 -2.0000 -2.9999
1.0000 2.0000 2.9999
[torch.FloatTensor of size 2x3]
>>> bn.bias=nn.Parameter(torch.Tensor([0.1, 0.2, 0.3]))
>>> bn(Variable(torch.Tensor([[1,2,3],[2,3,4]])))
Variable containing:
-0.9000 -1.8000 -2.6999
1.1000 2.2000 3.2999
[torch.FloatTensor of size 2x3]