torch.nn.functional.avg_pool2d(...)与adaptive_avg_pool2d(...):
avg_pool2d(input, kernel_size, stride, padding):平均池化公式:
input:输入张量
kernel_size:卷积核大小,如kernel_size=3,表示为卷积核大小为3X3
stride:滑动窗口步长
padding:外边加几圈0, 如padding=1, 表示外边加1圈0
例如:
F.avg_pool2d
input x的shape为torch.Size([1, 3, 2])
卷积核大小设置为2X2
步长为1
外边加一圈0
运行结果:
运行结果
草图
知道输入数据shape, 核大小,步长,padding,如何得到输出数据的shape:
公式:
卷积结果计算公式
上述例子中假设channel为1, 宽为3, 高为2
则:W=(3-2+2*1)/1 + 1=4
H=(1-2 + 2*1)/1 + 1 = 3
所以输出数据 shape为[1, 4, 3]
adaptive_avg_pool2d(input, output_size): 自适应平均池化公式:
input:输入张量
output_size:输出大小,如(1, 1), 表述输出结果最后2维必须为(1,1),其他保持不变
例如:
F.adaptive_avg_pool2d
运行结果:
运行结果
自适应是如何知道卷积核的大小?其实是从上面公式推导出来的,知道输入、输出大小,假设padding=0, 就能够求出kernel_size。