下面是关于PyTorch平均池化nn.AvgPool2d()
的完整攻略。
什么是平均池化
平均池化(Average Pooling)是一种池化(Pooling)操作,其主要作用是对于输入的二维张量进行降采样,同时保留输入张量的主要特征。平均池化操作会将张量中一个固定大小的区域内的值计算平均值并输出。相比于最大池化(Max Pooling),平均池化的主要特点在于其更加稳定,对于输入的异常值不敏感,同时不容易导致网络的过拟合。
PyTorch中的平均池化
PyTorch是一款广泛使用的深度学习框架之一,在PyTorch中可以通过nn.AvgPool2d()
函数实现二维平均池化操作。下面是具体的使用方法和示例说明。
使用方法
nn.AvgPool2d()
是PyTorch中二维平均池化的实现函数,其定义如下:
class torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)
其中,各个参数的含义如下:
- kernel_size: 池化操作的窗口大小。可输入一个int型数值,表示池化操作使用的正方形窗口大小;也可输入一个表示宽度和高度的tuple,表示池化操作使用的非正方形窗口大小。默认值为3。
- stride: 池化操作的步长大小。可输入一个int型数值,表示池化操作的横纵步长均相等;也可输入一个表示宽度和高度的tuple,表示池化操作的横纵步长不相等。默认值为None,表示步长与窗口大小相等。
- padding: 输入张量的边缘填充数量。默认值为0。
- ceil_mode: 当输入大小和自适应大小不匹配时,确定输出形状是否向上舍入。默认值为False。
- count_include_pad: 一般来说池化操作不考虑边界外的数字,但是当padding有值时,为了保证样本点是覆盖到的,其对应输出像素点时计算padding的值也有效,count_include_pad=True就会让计算把padding值也考虑进去。默认值为True。
- divisor_override: 如果不为None,则用它覆盖自动求导的输出像素数量的计算,它除以池化窗口大小。默认值为None。
示例说明
下面通过两个实例,介绍nn.AvgPool2d()
函数的具体使用方法。
示例1
import torch
import torch.nn as nn
input = torch.randn(1, 1, 4, 4)
pool = nn.AvgPool2d(2, stride=2)
output = pool(input)
print("input: ", input)
print("output: ", output)
运行结果为:
input: tensor([[[[ 0.1218, 1.1140, 1.6073, 0.5049],
[-0.3338, 1.8880, 0.5913, -1.3907],
[ 0.4478, -0.2553, 0.5243, -2.6133],
[-0.2193, 0.4084, 1.0033, -0.1127]]]])
output: tensor([[[[ 1.2292, 0.6911],
[ 0.1910, 0.3547]]]])
其中input
是输入的4x4大小的张量,nn.AvgPool2d(2, stride=2)
表示将输入张量进行2x2大小的平均池化,步长为2,对输入张量进行降采样,输出一个2x2大小的张量。因此,输入张量被划分为四个2x2的方块,分别计算平均数输出。
示例2
import torch
import torch.nn as nn
input = torch.randn(1, 1, 3, 3)
pool = nn.AvgPool2d(2, stride=1, padding=1)
output = pool(input)
print("input: ", input)
print("output: ", output)
运行结果为:
input: tensor([[[[-0.9277, -1.1324, 0.1860],
[-0.3994, 0.8302, -1.0331],
[ 0.5452, -0.4061, -0.6132]]]])
output: tensor([[[[-0.8077, -0.3234, -0.0746, 0.0553],
[-0.5144, -0.2985, 0.1541, -0.3796],
[ 0.0310, -0.2705, -0.4593, -0.6307],
[-0.1349, -0.4067, -0.7688, -0.4655]]]])
其中input
是输入的3x3大小的张量,nn.AvgPool2d(2, stride=1, padding=1)
表示将输入张量进行2x2大小的平均池化,步长为1,对输入张量进行降采样。由于池化窗口大小为2,步长为1,且在边缘补零一个像素(padding=1),因此对于输入张量中的每一个像素点,最多有4个窗口覆盖它。最终对每个窗口覆盖的像素点计算平均值输出,大小为4x4的输出张量。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pytorch平均池化nn.AvgPool2d()使用方法实例 - Python技术站