一维池化
一维池化常用于NLP任务,二维池化主要用于任务。
一维平均池化
对应的pytorch代码实现:
from torch import nn
import torch
#随机的3维张量 batch_size * sentence_length * dim_size,取值区间为1-4的整数
x = torch.randint(1, 4, size=(3,4,5))
print('变换前x的形状:')
print(x)
# pytorch默认在最后一维的方向上做池化,所以需要变形以获得希望的池化方式
x = x.transpose(1,2)
#print('\n变换后x的形状:')
#print(x)
#入参4,代表每4组池化一次
avg_pool = nn.AvgPool1d(4)
x_float = x.float()
y = avg_pool(x_float)
#print('\n池化后的形状:')
#print(y)
print('\n池化后变性为最终形状:')
y = y.transpose(1,2)
print(y)
#print(y.squeeze())
'''
变换前x的形状:
tensor([[[2, 1, 1, 1, 1],
[2, 3, 2, 2, 3],
[2, 1, 2, 3, 3],
[2, 3, 1, 2, 3]],
[[1, 3, 2, 2, 2],
[2, 3, 3, 1, 2],
[2, 1, 1, 1, 2],
[1, 1, 1, 2, 3]],
[[3, 2, 3, 3, 2],
[3, 3, 1, 2, 2],
[3, 3, 1, 2, 2],
[3, 3, 3, 1, 3]]])
池化后变性为最终形状:
tensor([[[2.0000, 2.0000, 1.5000, 2.0000, 2.5000]],
[[1.5000, 2.0000, 1.7500, 1.5000, 2.2500]],
[[3.0000, 2.7500, 2.0000, 2.0000, 2.2500]]])
'''
二维池化
二维max 池化
对应的pytorch代码实现:
from torch import nn
import torch
#随机的3维张量 batch_size * sentence_length * dim_size,取值区间为1-4的整数
x = torch.randint(1, 9, size=(3,4,6))
print('变换前x的形状:')
print(x)
# max_pool = nn.MaxPool2d(kernel_size=池化窗口, stride=你的步长)
max_pool = nn.MaxPool2d((2, 3),(2,3))
x_float = x.float()
y = max_pool(x_float)
print('\n池化后的形状:')
print(y)
'''
变换前x的形状:
tensor([[[5, 4, 3, 8, 2, 7],
[1, 5, 2, 1, 6, 6],
[2, 2, 3, 8, 8, 4],
[3, 6, 3, 8, 1, 8]],
[[1, 4, 7, 5, 4, 4],
[4, 6, 7, 2, 1, 5],
[8, 3, 3, 8, 5, 8],
[6, 5, 1, 7, 2, 3]],
[[4, 6, 3, 7, 6, 5],
[1, 8, 3, 1, 7, 5],
[8, 1, 6, 8, 7, 4],
[3, 8, 4, 2, 2, 2]]])
池化后的形状:
tensor([[[5., 8.],
[6., 8.]],
[[7., 5.],
[8., 8.]],
[[8., 7.],
[8., 8.]]])
'''