[pytorch、学习] - 5.4 池化层

参考

5.4 池化层

在本节中我们介绍池化(pooling)层,它的提出是为了缓解卷积层对位置的过度敏感性。

5.4.1 二维最大池化层和平均池化层

池化层直接计算池化窗口内元素的最大值或者平均值。该运算也叫做最大池化层或平均池化层。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zFMDFZFa-1594174772079)(attachment:image.png)]

下面把池化层的前向计算实现在pool2d函数里。

import torch
import torch.nn as nn

def pool2d(X, pool_size, mode="max"):
    X = X.float()
    p_h, p_w = pool_size
    Y = torch.zeros(X.shape[0] - p_h + 1, X.shape[1] - p_w + 1)
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            if mode == 'max':
                Y[i, j] = X[i: i + p_h, j: j + p_w].max()
            elif mode == 'avg':
                Y[i, j] = X[i: i + p_h, j: j + p_w].mean()
        
    return Y
X = torch.tensor([[0,1,2], [3,4,5], [6,7,8]])
pool2d(X, (2, 2))

在这里插入图片描述
下面验证一下平均池化层

pool2d(X, (2,2),'avg')

在这里插入图片描述

5.4.2 填充和步幅

池化层也可以定义填充和步幅

X = torch.arange(16, dtype=torch.float).view((1, 1, 4, 4))
X

在这里插入图片描述
默认情况下,MaxPool2d实例里步幅和池化窗口形状相同。下面使用形状为(3, 3)的池化窗口,默认获得形状为(3, 3)的步幅。

pool2d = nn.MaxPool2d(3)
pool2d(X)

在这里插入图片描述
我们可以手动指定步幅和填充。

pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)

在这里插入图片描述
当然,我们也可以指定非正方形的池化窗口,并分别指定高和宽上的填充和步幅。

pool2d = nn.MaxPool2d((2, 4), padding=(1, 2), stride=(2, 3))
pool2d(X)

在这里插入图片描述

5.4.3 多通道

池化层对每个输入通道分别池化,而不是像卷积层那样将各通道的输入按通道相加.

X = torch.cat((X, X + 1), dim=1)
X

在这里插入图片描述

池化后,我们发现输出通道数仍然是2。

猜你喜欢

转载自blog.csdn.net/piano9425/article/details/107199451
5.4