测试代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import torch
import torch.nn as nn
m = nn.BatchNorm2d( 2 ,affine = True ) #权重w和偏重将被使用
input = torch.randn( 1 , 2 , 3 , 4 )
output = m( input )
print ( input )
print ( "归一化权重:" )
print (m.weight)
print ( "归一化的偏重:" )
print (m.bias)
print ( "归一化的输出:" )
print (output)
print ( "输出的尺度:" )
print (output.size())
# i = torch.randn(1,1,2)
print ( "输入的第一个维度:" )
print ( input [ 0 ][ 0 ])
firstDimenMean = torch.Tensor.mean( input [ 0 ][ 0 ])
firstDimenVar = torch.Tensor.var( input [ 0 ][ 0 ], False ) #Bessel's Correction贝塞尔校正不会被使用
print (m.eps)
print ( "输入的第一个维度平均值:" )
print (firstDimenMean)
print ( "输入的第一个维度方差:" )
print (firstDimenVar)
bacthnormone = \
(( input [ 0 ][ 0 ][ 0 ][ 0 ] - firstDimenMean) / (torch. pow (firstDimenVar + m.eps, 0.5 ) ))\
* m.weight[ 0 ] + m.bias[ 0 ]
print (bacthnormone)
|
输出为:
输入图片:
1
2
3
4
5
6
7
8
|
tensor([[[[ - 2.4308 , - 1.0281 , - 1.1322 , 0.9819 ],
[ - 0.4069 , 0.7973 , 1.6296 , 1.6797 ],
[ 0.2802 , - 0.8285 , 2.0101 , 0.1286 ]],
[[ - 0.5740 , 0.1970 , - 0.7209 , - 0.7231 ],
[ - 0.1489 , 0.4993 , 0.4159 , 1.4238 ],
[ 0.0334 , - 0.6333 , 0.1308 , - 0.2180 ]]]])
|
归一化权重:
1
2
|
Parameter containing:
tensor([ 0.5653 , 0.0322 ])
|
归一化的偏重:
1
2
|
Parameter containing:
tensor([ 0. , 0. ])
|
归一化的输出:
1
2
3
4
5
6
7
8
|
tensor([[[[ - 1.1237 , - 0.5106 , - 0.5561 , 0.3679 ],
[ - 0.2391 , 0.2873 , 0.6510 , 0.6729 ],
[ 0.0612 , - 0.4233 , 0.8173 , - 0.0050 ]],
[[ - 0.0293 , 0.0120 , - 0.0372 , - 0.0373 ],
[ - 0.0066 , 0.0282 , 0.0237 , 0.0777 ],
[ 0.0032 , - 0.0325 , 0.0084 , - 0.0103 ]]]])
|
输出的尺度:
1
|
torch.Size([ 1 , 2 , 3 , 4 ])
|
输入的第一个维度:
1
2
3
4
|
tensor([[ - 2.4308 , - 1.0281 , - 1.1322 , 0.9819 ],
[ - 0.4069 , 0.7973 , 1.6296 , 1.6797 ],
[ 0.2802 , - 0.8285 , 2.0101 , 0.1286 ]])
1e - 05
|
输入的第一个维度平均值:
1
|
tensor( 0.1401 )
|
输入的第一个维度方差:
1
2
|
tensor( 1.6730 )
tensor( - 1.1237 )
|
结论:
输出的计算公式如下
注意torch中方差实现的方法是没有使用Bessel's correction 贝塞尔校正的方差,所以在自己写的方差中不要用错了。(贝塞尔校正,即样本方差和总体方差之间区别和校正。)
以上这篇pytorch方法测试详解——归一化(BatchNorm2d)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/tmk_01/article/details/80679549