torch.nn.LPPool2d(norm_type, kernel_size, stride=None, ceil_mode=False)
每一个窗口的计算公式为:
p即为norm_type,当p=时,相当于最大池化;当p=1时,相当于Sum池化
kernel_size为滑动窗口大小,可以为一个整数,也可以为一个元组
stride为步幅,默认等于kernel_size
图文示例:
也就是说,池化后的数不再是每个滑动窗口里数的最大值或平均值,而是它们的p次方和再开p次根
代码示例:
# 代码输入:
import torch
import torch.nn as nn
x = torch.range(1,120).reshape(2, 3, 4, 5)
print("原始数据:\n",x.shape, '\n', x)
pool = nn.LPPool2d(norm_type=2, kernel_size=2)
print("池化后数据:\n", pool(x))
print(pool(x).shape)
# 输出结果:
原始数据:
torch.Size([2, 3, 4, 5])
tensor([[[[ 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., 37., 38., 39., 40.]],
[[ 41., 42., 43., 44., 45.],
[ 46., 47., 48., 49., 50.],
[ 51., 52., 53., 54., 55.],
[ 56., 57., 58., 59., 60.]]],
[[[ 61., 62., 63., 64., 65.],
[ 66., 67., 68., 69., 70.],
[ 71., 72., 73., 74., 75.],
[ 76., 77., 78., 79., 80.]],
[[ 81., 82., 83., 84., 85.],
[ 86., 87., 88., 89., 90.],
[ 91., 92., 93., 94., 95.],
[ 96., 97., 98., 99., 100.]],
[[101., 102., 103., 104., 105.],
[106., 107., 108., 109., 110.],
[111., 112., 113., 114., 115.],
[116., 117., 118., 119., 120.]]]])
池化后数据:
tensor([[[[ 9.4868, 13.0384],
[ 28.4605, 32.4037]],
[[ 48.2701, 52.2494],
[ 68.1909, 72.1803]],
[[ 88.1476, 92.1412],
[108.1203, 112.1160]]],
[[[128.1015, 132.0984],
[148.0878, 152.0855]],
[[168.0774, 172.0756],
[188.0691, 192.0677]],
[[208.0625, 212.0613],
[228.0570, 232.0560]]]])
torch.Size([2, 3, 2, 2])