本文主要是介绍pytorch 与 BatchNormalization,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
BatchNormallization是神经网络中的一个正则化技术,可以加速网络的收敛,并且在一定程度上解决深度网络“梯度弥散”的问题。它本是数据预处理的一种方法,google的研究人员将它应用在了神经网络中。论文地址:https://arxiv.org/abs/1502.03167
理论
pytorch batch normalization: http://pytorch.org/docs/master/nn.html#normalization-layers
对于输入 x={x1,x2,…,xN}T ,输出 y={y1,y2,…,yN}T ,其中 N 表示特征维数(feature map的个数)。
其中如果 weight=1,bias=0 ,则是把数据的每一维都归一化到均值为0,方差为1。加上 weight 和 bias 后是把数据归一化为标准差为 weightn 均值为 μn 。
实验
>>> import torch
>>> import torch.nn as nn
>>>> from torch.autograd import Variable
>>> bn=nn.BatchNorm1d(3);
>>>> bn.weight
Parameter containing:0.86450.94570.2024
[torch.FloatTensor of size 3]
>>> bn.bias
Parameter containing:000
[torch.FloatTensor of size 3]
>>> bn.weight=nn.Parameter(torch.Tensor([1,1,1]));
>>>> bn.weight
Parameter containing:111
[torch.FloatTensor of size 3]
>>> bn(Variable(torch.Tensor([[1,2,3],[2,3,4]])))
Variable containing:
-1.0000 -1.0000 -1.00001.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.99991.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.69991.1000 2.2000 3.2999
[torch.FloatTensor of size 2x3]
这篇关于pytorch 与 BatchNormalization的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!